Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除具有特定值的字典键_Python - Fatal编程技术网

Python 删除具有特定值的字典键

Python 删除具有特定值的字典键,python,Python,我知道字典不应该这样使用,所以没有内置函数来帮助实现这一点,但我需要删除字典中每个具有特定值的条目 如果我的字典看起来像: 'NameofEntry1': '0' 'NameofEntry2': 'DNC' ... 我需要删除(可能是弹出)所有具有值DNC的条目,字典中有多个条目 修改原始目录: for k,v in your_dict.items(): if v == 'DNC': del your_dict[k] 或使用口述理解创建新的口述: your_dict

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

如果我的字典看起来像:

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

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

修改原始目录:

for k,v in your_dict.items():
    if v == 'DNC':
       del your_dict[k]
或使用口述理解创建新的口述:

your_dict = {k:v for k,v in your_dict.items() if v != 'DNC'}
从上的
iteritems()
iterkeys()
itervalues()

在添加或删除时使用
iteritems()
iterkeys()
itervalues()
删除字典中的条目可能会引发
运行时错误
或失败 迭代所有条目

这同样适用于dict:循环中键的正常

在Python 3中,这适用于
dict.keys()
dict.values()
dict.items()
,这应该可以:

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

您只需要确保在对字典进行迭代时没有修改它,否则会得到
运行时错误:在迭代过程中字典的大小发生了更改

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


如果限制:在迭代字典时修改字典是一个问题,您可以创建一个与dict兼容的新类,该类存储具有给定值的所有键的反向索引(在dict项的创建/更新/删除时更新),这些键可以是del的参数,而无需迭代dict项

子类dict,并覆盖
\uuuuuu setitem\uuuuuuuuuuuuuuuuuuuu
pop
popitem
清除


如果这是一个你经常做的操作,那可能会很方便和快速。

我得到
运行时错误:字典在迭代过程中改变了大小
@gramps_lika_Spyder检查最后一行关于Python 3的语句。在Python 3中,你需要
列表(d.items())
,正如@jared的回答中提到的。
>>> d = {'NameofEntry1': '0', 'NameofEntry2': 'DNC'}
>>> for k,v in d.items():
...     if v == 'DNC':
...         del d[k]
... 
>>> d
{'NameofEntry1': '0'}