删除字典项目如果密钥存在

除了以下情况之外,是否还有其他方法可以删除字典中的项目:

if key in mydict: del mydict[key] 

该场景是我给了一个从给定字典中删除键的集合,但我不知道它们是否都存在于字典中。 以防万一我错过了一个更有效的解决scheme。

你可以使用dict.pop

  mydict.pop("key", None) 

请注意,如果没有给出第二个参数None ,那么如果键不在字典中,则引发KeyError 。 提供第二个参数可以防止出现条件exception。

还有:

 try: del mydict[key] except KeyError: pass 

这只会做1查找,而不是2.但是, except子句是昂贵的,所以如果你最终经常碰到except子句,这可能会比你已经有的效率低。

方法:计算键删除,mutate字典

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

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

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

方法:计算键保留,用这些键做出新的字典

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

 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}