假设我有一个带有整数键和整数值的OrderedDict
od
。我想迭代od
并根据我找到的值删除od
的元素。基本上我想要实现的是:
od = {1: 2, 2: 4, 3: 5}
for key in od:
del od[key]
最后,我希望od
等于{1: 2, 3: 5}
。 Python不允许在迭代期间更改OrderedDict
的大小。有可能克服这个问题吗?
我正在使用Python 3.5
答案 0 :(得分:4)
这是因为在迭代它时你无法修改dict
的长度。相反,您必须迭代dict
中的键列表副本:
# For both Python 3.x and 2.7
>>> for key in list(od):
... del od[key]
...
>>> od
{}
然而,在Python2.7中,甚至可以使用dict.keys()
来获得相同的行为:
# In Python 2.7
>>> for key in od.keys():
... del od[key]
...
>>> od
{}
答案 1 :(得分:2)
这是我所知道的最简单的方法。享受!
使用dicts
,您无法更改字典的长度。但是,您可以做的是制作原始字典的列表副本,并使用它来遍历原始字典。如下图所示
od = {'a': 2, 'b': 4, 'c': 5}
for key in list(od):
if key == 'b':
print(key)
del od[key]
print(od)
答案 2 :(得分:0)
我认为你的意思是
od = {1: 2, 2: 4, 3: 5}
for key in od.copy(): # iterate over a copy
if key in od and od[key] in od: # check for both key, 'target' key
del od[od[key]] # then delete the target with indirect indexing
od
Out[52]: {1: 2, 3: 5}