2010-05-28 34 views
4

我在Python中有這個字典;如何在python中打印未排序的字典?

d={} 
d['b']='beta' 
d['g']='gamma' 
d['a']='alpha' 

當我打印字典;

for k,v in d.items(): 
    print k 

我明白了;

a 
b 
g 

它似乎像Python自動排序字典!我怎樣才能得到原始的未分類列表?

迦特

回答

11

Dicts don't work like that

CPython的實現細節:鍵和值指的是這個非隨機的,不同的Python實現變化的任意順序排列,取決於字典的歷史插入和刪除。

你可以使用一個清單,2元組,而不是:

d = [('b', 'beta'), ('g', 'gamma'), ('a', 'alpha')] 

類似,但更好的解決辦法是在Wayne's answer概述。

2

詞典中沒有順序可以說,沒有原始未分類列表

+1

正如Marcelo Cantos所提到的,較新版本的Python提供了OrderedDict,它保留了插入順序。 – 2010-05-28 12:06:42

+0

@John:作爲OP提及他使用內置的'字典' – SilentGhost 2010-05-28 12:08:01

6

請勿使用字典。或者使用Python 2.7/3.1 OrderedDict類型。

1

不,python不排序字典,它會太昂貴。 items()的順序是任意的。從python文檔:

CPython的實現細節:按鍵 和值在任意 秩序,產生非隨機的上市,改變 不同的Python實現,並 取決於 插入和刪除字典的歷史。

10

正如前面所提到的,字典不會對您放入的物品進行排序或取消排序。當您檢索它時,它的排列方式是「魔術」。如果你想保留一個訂單-sorted或不需要,你還需要綁定一個列表或元組。

這會給你保留順序列表相同的字典結果:

greek = ['beta', 'gamma', 'alpha'] 
d = {} 
for x in greek: 
    d[x[0]] = x 

只需更改[],以()如果您有沒有需要改變原來的列表/訂單。

+1

+1這是一個很好的解決方案:) – Skilldrick 2010-05-28 13:25:10

+0

我得到了排序結果。你使用的是什麼樣的python – Samuel 2014-01-10 05:24:03

+0

@Samuel,你的意思是你的字典以明顯的排序順序打印出來?因爲這完全是由「意外」造成的 - 這完全取決於底層的Python實現。它可能會打印出您輸入的相同順序,可能不會。 – 2014-01-10 13:15:36