我可以在迭代时从 Python 字典中删除项目吗?
我想从字典中删除不满足特定条件的元素,而不是创建一个全新的字典。以下是一个好的解决方案,还是有更好的方法?
for k, v in mydict.items():
if k == val:
del mydict[k]
原文由 user248237 发布,翻译遵循 CC BY-SA 4.0 许可协议
我可以在迭代时从 Python 字典中删除项目吗?
我想从字典中删除不满足特定条件的元素,而不是创建一个全新的字典。以下是一个好的解决方案,还是有更好的方法?
for k, v in mydict.items():
if k == val:
del mydict[k]
原文由 user248237 发布,翻译遵循 CC BY-SA 4.0 许可协议
您也可以分两步完成:
remove = [k for k in mydict if k == val]
for k in remove: del mydict[k]
我最喜欢的方法通常是制作一个新的字典:
# Python 2.7 and 3.x
mydict = { k:v for k,v in mydict.items() if k!=val }
# before Python 2.7
mydict = dict((k,v) for k,v in mydict.iteritems() if k!=val)
原文由 Jochen Ritzel 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答884 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
对于 Python 3+ :
其他答案适用于 Python 2 ,但 raise a
RuntimeError
用于 Python 3 :发生这种情况是因为
mydict.keys()
返回一个迭代器而不是列表。正如评论中所指出的,只需将mydict.keys()
转换为list(mydict.keys())
的列表,它应该可以工作。对于 Python 2 :
控制台中的一个简单测试表明您无法在遍历字典时修改它:
正如 delnan 的回答中所述,当迭代器试图移动到下一个条目时,删除条目会导致问题。相反,使用
keys()
方法获取键列表并使用它:如果您需要根据项目值删除,请改用
items()
方法: