我知道字典不是以这种方式使用的,因此没有内置函数可以帮助实现这一点,但我需要删除字典中具有特定值的每个条目。
所以如果我的字典看起来像:
'NameofEntry1': '0'
'NameofEntry2': 'DNC'
...
我需要删除(可能是pop)所有具有值DNC的条目,字典中有多个。
答案 0 :(得分:15)
修改原始字典:
for k,v in your_dic.items():
if v == 'DNC':
del your_dic[k]
或使用dict comprehension创建一个新的dict:
your_dic = {k:v for k,v in your_dic.items() if v != 'DNC'}
来自iteritems()
,iterkeys()
和itervalues()
上的docs:
添加或时使用
iteritems()
,iterkeys()
或itervalues()
删除字典中的条目可能会引发RuntimeError
或失败 迭代所有条目。
同样适用于普通for key in dic:
循环。
在Python 3中,这适用于dict.keys()
,dict.values()
和dict.items()
。
答案 1 :(得分:3)
你需要确保在迭代时不要修改字典,否则你会得到RuntimeError: dictionary changed size during iteration
。
因此,您需要迭代密钥的值副本(d
使用2.x中的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'}
答案 2 :(得分:1)
这应该有效:
for key, value in dic.items():
if value == 'DNC':
dic.pop(key)
答案 3 :(得分:0)
如果限制重新:在迭代时修改字典是一个问题,你可以创建一个与dict兼容的新类,它存储具有给定值的所有键的反向索引(在创建/更新/删除dict时更新) item),它可以是del的参数,而不会遍历dict的项目。
子类字典,并覆盖__setitem__
,__delitem__
,pop
,popitem
和clear
。
如果这是一项你正在做很多事的操作,那可能会方便快捷。