迭代`OrderedDict`并删除它的一些键?

时间:2017-02-19 18:09:53

标签: python python-3.x dictionary

假设我有一个带有整数键和整数值的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

3 个答案:

答案 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}