在Python中从字典中移除某些键
我正在尝试构建一个字典,这个字典里面包含了一系列的集合:
{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()
方法返回的结果。因为这个方法会给你一个键的列表,所以在你调用这个方法之后,即使字典发生了变化,也不会受到影响。