2014-03-01 31 views
1

我遇到了循環通過字典的問題。下面的代碼:按指定順序的Python循環字典

d = {} 
d['a'] = 1 
d['b'] = 2 
d['c'] = 3 
for k,v in d.iteritems(): 
    print k,v 

結果:

a 1 
c 3 
b 2 

但期望的結果是:

a 1 
b 2 
c 3 

有誰知道如何解決循環莫名其妙地維護秩序的元素被分配在?謝謝!

回答

2

在Python中,普通字典被設計爲無序。意思是,他們不應該在這裏使用。

相反,你應該使用collections.OrderedDict

>>> from collections import OrderedDict 
>>> d = OrderedDict() 
>>> d['a'] = 1 
>>> d['b'] = 2 
>>> d['c'] = 3 
>>> for k,v in d.iteritems(): 
...  print k,v 
... 
a 1 
b 2 
c 3 
>>> 

與普通的詞典,OrderedDict保證保留其中的元素被分配順序。

+0

優秀!謝謝! – Charlie

+0

對不起,我等了10分鐘.. – Charlie

1

字典不維持秩序,所以你需要的按鍵排序:

for k,v in sorted(d.iteritems,key=lambda x: x[0]): 
    print k,v 

或者,使用collections.OrderedDict對象,該對象在內部維護的插入順序鍵的列表:

import collections 
d = collections.OrderedDict() 
... 
for k,v in d.iteritems(): 
    print k,v