2024-10-06 14:22:07 发布
网友
我知道dictionary不应该以这种方式使用,所以没有内置函数来帮助实现这一点,但是我需要删除字典中具有特定值的每个条目。
如果我的字典看起来像:
'NameofEntry1': '0' 'NameofEntry2': 'DNC' ...
我需要删除(可能是pop)所有值为DNC的条目,字典中有多个条目。
这应该有效:
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:
iteritems()
iterkeys()
itervalues()
Using iteritems(), iterkeys() or itervalues() while adding or deleting entries in the dictionary may raise a RuntimeError or fail to iterate over all entries.
RuntimeError
这同样适用于正常的for key in dict:循环。
for key in dict:
在Python 3中,这适用于dict.keys()、dict.values()和dict.items()。
dict.keys()
dict.values()
dict.items()
您只需要确保在遍历字典时没有修改它,否则您将得到RuntimeError: dictionary changed size during iteration。
RuntimeError: dictionary changed size during iteration
因此,您需要迭代键和值的副本(对于2.x中的d使用d.items(),或3.x中的list(d.items()))
d
d.items()
list(d.items())
>>> d = {'NameofEntry1': '0', 'NameofEntry2': 'DNC'} >>> for k,v in d.items(): ... if v == 'DNC': ... del d[k] ... >>> d {'NameofEntry1': '0'}
这应该有效:
修改原始dict:
或者使用dict comprehension创建一个新的dict:
从
iteritems()
,iterkeys()
和itervalues()
上的docs:这同样适用于正常的
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())
)相关问题 更多 >
编程相关推荐