for循环跳过python中字典的部分

时间:2014-12-14 13:40:50

标签: python for-loop dictionary

GeoFigs =  {'Populus':0, 'Tristidia':1, 'Albus':2, 'Fortuna Major':3, 'Rubeus':4,
            'Acquisitio':5, 'Conjunctivo':6, 'Caput Draconis':7, 'Laetita':8, 'Carcer':9, 
            'Amissio':10, 'Puella':11, 'Fortuna Minor':12, 'Puer':13, 'Cauda Draconis':14, 'Via':15}
KeyGeo = dict.copy(GeoFigs)
for key in KeyGeo:
    print KeyGeo[key]
    keychange = KeyGeo[key]
    newValue = key
    del KeyGeo[key]
    KeyGeo[keychange] =  newValue

当我运行for循环时,它会跳过一些产生

的键
(0, 'Populus'), (1, 'Tristidia'), ('Carcer', 9), (3, 'Fortuna Major'), (4, 'Rubeus'),
(5, 'Acquisitio'), (6, 'Conjunctivo'), (7, 'Caput Draconis'), ('Puer', 13), (10, 'Amissio'),
(11, 'Puella'), (12, 'Fortuna Minor'), (2, 'Albus'), (14, 'Cauda Draconis'), (15, 'Via'), ('Laetita', 8)]

任何想法为什么它只跳过第3和第9?

2 个答案:

答案 0 :(得分:2)

这里有两个问题:

  1. 未定义dict中键的顺序。如果您关心订购,请使用OrderedDict
  2. 之类的内容
  3. 您正在对dict进行结构更改,同时对其进行迭代。请参阅Modifying a Python dict while iterating over it

答案 1 :(得分:0)

其他人已经解决了这个问题 - 你在迭代时改变了dict。您可以在开始之前获取密钥的副本来解决问题。它在python 2和3中有点不同。在python 2中,keys是一个列表:

for key in KeyGeo.keys():
    ...

在python 3中,keys是一个迭代器,所以你必须在开始之前进行迭代

for key in list(KeyGeo.keys()):
    ...