在Python中从字典中移除某些键

12 投票
3 回答
30279 浏览
提问于 2025-04-15 22:32

我正在尝试构建一个字典,这个字典里面包含了一系列的集合:

{Field1:{Value1, Value2, Value3}, Field2{Value4}}

问题是,我想从字典中删除那些集合里只有一个值的字段。我写了这样的代码:

for field in FieldSet:
    if len(FieldSet[field]) == 1:
        del(FieldSet[field])

但是我收到了一个错误提示:“RuntimeError: dictionary changed size during execution”(运行时错误:在执行过程中字典的大小发生了变化)。这也不奇怪,因为我确实在这么做。如果我必须想办法解决这个问题也没关系,但这样做真的可行吗?

3 个回答

1

这里有一个叫做 pop 的方法。它的作用是移除一个键所对应的元素。根据你的例子,这看起来像这样:

for field in FieldSet.keys():
    if len(FieldSet[field]) == 1:
        FieldSet.pop(field)

这是在 Python 3.2 版本中的用法,不过我不确定这是不是新功能:

http://docs.python.org/dev/library/stdtypes.html#dict.pop

我刚试了一下,确实如宣传的那样有效。

14

有时候,直接修改FieldSet并不是最好的选择,特别是当你需要进行很多改动的时候。这时候,创建一个新的FieldSet,然后把它和原来的名字绑定起来,可能会更好。

FieldSet = dict((k, v) for k, v in FieldSet.iteritems()
                if len(v) != 1)
22

可以直接遍历从 .keys() 方法返回的结果。因为这个方法会给你一个键的列表,所以在你调用这个方法之后,即使字典发生了变化,也不会受到影响。

撰写回答