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