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?
答案 0 :(得分:2)
这里有两个问题:
dict
中键的顺序。如果您关心订购,请使用OrderedDict
。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()):
...