如何从字典中删除项目,同时迭代?

问题:

在Python中从Python中删除项目是否合法?
例如:

for k, v in mydict.iteritems():
   if k == val:
     del mydict[k]

这个想法是从字典中删除不符合特定条件的元素,而不是创建一个新的字典,它是被迭代的一个子集。
这是一个很好的解决方案?有更优雅/高效的方式吗?

回答:

控制台中的简单测试显示,您可以在迭代过程中修改字典:

>>> mydict = {'one': 1, 'two': 2, 'three': 3, 'four': 4}
>>> for k, v in mydict.iteritems():
...    if k == 'two':
...        del mydict[k]
...
------------------------------------------------------------
Traceback (most recent call last):
  File "<ipython console>", line 1, in <module>
RuntimeError: dictionary changed size during iteration

如delnan的答案所述,当迭代器尝试移动到下一个条目时,删除条目会导致问题。相反,使用keys()方法获取键的列表并使用它:

>>> for k in mydict.keys():
...    if k == 'two':
...        del mydict[k]
...
>>> mydict
{'four': 4, 'three': 3, 'one': 1}

如果您需要根据项目值进行删除,请改用items()方法:

>>> for k, v in mydict.items():
...     if v == 3:
...         del mydict[k]
...
>>> mydict
{'four': 4, 'one': 1}

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How to delete items from a dictionary while iterating over it?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

56 − = 50