如果键存在,删除字典项
有没有其他方法可以在字典中删除一个项目,前提是这个键存在,而不是使用下面的方式:
if key in mydict:
del mydict[key]
这个情况是,我有一组要从字典中删除的键,但我不确定这些键是否都在字典里。只是想看看有没有更有效的解决方案。
3 个回答
7
方法:计算要删除的键,修改字典
我们把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}
29
还有以下内容:
try:
del mydict[key]
except KeyError:
pass
这个方法只需要查找一次,而不是两次。不过,except
语句的开销比较大,所以如果你经常触发这个 except
语句,可能会比你现在的方法效率低。
961
你可以使用 dict.pop
这个方法:
mydict.pop("key", None)
需要注意的是,如果你没有提供第二个参数,也就是 None
,那么当你要找的键不在字典里时,会出现一个叫 KeyError
的错误。提供第二个参数可以避免这种错误。