如果键存在,删除字典项

454 投票
3 回答
291793 浏览
提问于 2025-04-17 19:05

有没有其他方法可以在字典中删除一个项目,前提是这个键存在,而不是使用下面的方式:

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 的错误。提供第二个参数可以避免这种错误。

撰写回答