Python 在“OrderedDict”上迭代并删除它的一些键?
假设我有一个带有整键和整数值的Python 在“OrderedDict”上迭代并删除它的一些键?,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,假设我有一个带有整键和整数值的OrderedDictod。我想迭代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,这是因为在迭代时不能修改dict的长度。相反,您必须在dict中迭代密钥列表的副本,如下所示: # Fo
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,这是因为在迭代时不能修改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
{}
我想这就是你的意思
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}
这是我知道的最简单的方法。享受吧 使用
dicts
,您无法更改字典的长度。但是,您可以做的是创建原始词典的列表副本,并使用该副本在原始词典中进行迭代。如下图所示
od = {'a': 2, 'b': 4, 'c': 5}
for key in list(od):
if key == 'b':
print(key)
del od[key]
print(od)
list(od)
应该可以在Python2或Python3中使用。我不完全确定,但我认为,dict.keys
只是一个非常旧的Python版本的遗留版本,它不支持一般的迭代,keys()
是获取dict
@f5r5e5d的密钥的唯一方法。答案澄清了这一点,特别是说您可以为3.x
使用items