删除具有特定值的字典键

2024-10-06 14:22:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道dictionary不应该以这种方式使用,所以没有内置函数来帮助实现这一点,但是我需要删除字典中具有特定值的每个条目。

如果我的字典看起来像:

'NameofEntry1': '0'
'NameofEntry2': 'DNC'
 ...

我需要删除(可能是pop)所有值为DNC的条目,字典中有多个条目。


Tags: 函数dictionary字典方式条目pop内置nameofentry1
3条回答

这应该有效:

for key, value in dic.items():
     if value == 'DNC':
         dic.pop(key)

修改原始dict:

for k,v in your_dict.items():
    if v == 'DNC':
       del your_dict[k]

或者使用dict comprehension创建一个新的dict:

your_dict = {k:v for k,v in your_dict.items() if v != 'DNC'}

iteritems()iterkeys()itervalues()上的docs

Using iteritems(), iterkeys() or itervalues() while adding or deleting entries in the dictionary may raise a RuntimeError or fail to iterate over all entries.

这同样适用于正常的for key in dict:循环。

在Python 3中,这适用于dict.keys()dict.values()dict.items()

您只需要确保在遍历字典时没有修改它,否则您将得到RuntimeError: dictionary changed size during iteration

因此,您需要迭代键和值的副本(对于2.x中的d使用d.items(),或3.x中的list(d.items())

>>> d = {'NameofEntry1': '0', 'NameofEntry2': 'DNC'}
>>> for k,v in d.items():
...     if v == 'DNC':
...         del d[k]
... 
>>> d
{'NameofEntry1': '0'}

相关问题 更多 >