如果密钥存在,则删除字典项

时间:2013-03-14 13:47:42

标签: python python-2.7

除非存在给定的密钥,否则还有其他方法可以删除字典中的项目,而不是:

if key in mydict:
    del mydict[key]

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

3 个答案:

答案 0 :(得分:444)

您可以使用 dict.pop

 mydict.pop("key", None)

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

答案 1 :(得分:9)

还有:

try:
    del mydict[key]
except KeyError:
    pass

这只执行1次查找而不是2次。但是,except子句很昂贵,所以如果你最终经常点击except子句,这可能会比你现有的效率低。

答案 2 :(得分:5)

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

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

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

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

方法:计算要保留的密钥,使用这些密钥创建新的字典

我更喜欢创建一个新字典来改变现有字典,所以我可能也会考虑这个:

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

或:

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