删除具有特定值的字典键

cod*_*kid 4 python

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

所以如果我的字典看起来像:

'NameofEntry1': '0'
'NameofEntry2': 'DNC'
 ...
Run Code Online (Sandbox Code Playgroud)

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

Ash*_*ary 16

修改原始字典:

for k,v in your_dic.items():
    if v == 'DNC':
       del your_dic[k]
Run Code Online (Sandbox Code Playgroud)

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

your_dic = {k:v for k,v in your_dic.items() if v != 'DNC'}
Run Code Online (Sandbox Code Playgroud)

文档iteritems(),iterkeys()itervalues():

使用iteritems(),iterkeys()itervalues()同时添加或删除字典中的条目可能会产生一种RuntimeError或无法遍历所有条目.

同样适用于正常for key in dic:循环.

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

  • 大声笑`del your_dic [k]`那是故意的 (14认同)
  • 我得到“运行时错误:字典在迭代期间更改了大小” (2认同)

Jar*_*red 7

您只需要确保在迭代字典时没有修改字典,否则您会得到RuntimeError: dictionary changed size during iteration.

所以,你需要遍历键,值的副本(对于d使用d.items()在2.x或list(d.items())在3.X)

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