是否有其他方法在给定键存在的情况下删除字典中的项,除了:
if key in mydict:
del mydict[key]
这个场景是,我得到了一个键的集合,要从给定的字典中删除,但我不确定它们是否都存在于字典中。以防我错过了更有效的方法。
是否有其他方法在给定键存在的情况下删除字典中的项,除了:
if key in mydict:
del mydict[key]
这个场景是,我得到了一个键的集合,要从给定的字典中删除,但我不确定它们是否都存在于字典中。以防我错过了更有效的方法。
当前回答
方法:计算键删除,变异字典
让我们称键为给定要删除的键的列表/迭代器。我会这样做:
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}
or:
keys_to_keep = set(mydict.keys()) - set(keys)
new_dict = {k: mydict[k] for k in keys_to_keep}
其他回答
还有:
try:
del mydict[key]
except KeyError:
pass
这只进行了1次查找,而不是2次。但是,except子句的开销很大,因此如果您经常使用except子句,那么它的效率可能会比您现有的要低。
方法:计算键删除,变异字典
让我们称键为给定要删除的键的列表/迭代器。我会这样做:
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}
or:
keys_to_keep = set(mydict.keys()) - set(keys)
new_dict = {k: mydict[k] for k in keys_to_keep}
你可以用dict.pop:
mydict.pop("key", None)
注意,如果没有给出第二个参数,即None,如果键不在字典中,则会引发KeyError。提供第二个参数可以防止出现条件异常。