关于python:如果键存在,则删除字典项

Delete a dictionary item if the key exists

本问题已经有最佳答案,请猛点这里访问。

只有在给定的键存在的情况下,才能删除字典中的项,除了:

1
2
if key in mydict:
    del mydict[key]

场景是,我得到一组要从给定字典中删除的键,但我不确定它们是否都存在于字典中。以防我错过一个更有效的解决方案。


您可以使用dict.pop

1
 mydict.pop("key", None)

请注意,如果没有给出第二个参数,即None,如果键不在字典中,则会引发KeyError。提供第二个参数可防止条件异常。


还有:

1
2
3
4
try:
    del mydict[key]
except KeyError:
    pass

这只执行1次查找,而不是2次查找。但是,except条款很昂贵,因此如果您经常碰到except子句,那么它的效率可能会比您现有的要低。


方法:计算要删除的键,改变dict

让我们调用keys您要删除的键的列表/迭代器。我会这样做:

1
2
3
keys_to_remove = set(keys).intersection(set(mydict.keys()))
for key in keys_to_remove:
    del mydict[key]

您预先计算所有受影响的项目并对其进行操作。

方法:计算要保存的密钥,用这些密钥生成新的dict

我更喜欢创建一个新字典,而不是改变现有的字典,因此我可能还会考虑:

1
2
keys_to_keep = set(mydict.keys()) - set(keys)
new_dict = {k: v for k, v in mydict.iteritems() if k in keys_to_keep}

或:

1
2
keys_to_keep = set(mydict.keys()) - set(keys)
new_dict = {k: mydict[k] for k in keys_to_keep}