2017-07-08 43 views
-1

我有那種像這樣的哈希表和拉姆達:轉換一個字典到OrderedDict

h = {"hlllleleo": 9, "hello": 5, "fgfgggf" : 7, "abcdefgh": 8} 
lbda = lambda x : h[x] 
from collections import OrderedDict as od 
od({x:h[x] for x in sorted(h, key=lbda)}) 
#Outputs: 
OrderedDict([('abcdefgh', 8), ('hlllleleo', 9), ('fgfgggf', 7), 
('hello', 5)]) 

爲什麼有序字典不出來分類,因爲它是建立?如果我循環排序()它被排序:

for x in sorted(h, key=lbda): 
    print x, h[x] 

# Outputs: 
hello 5 
fgfgggf 7 
abcdefgh 8 
hlllleleo 9 

回答

3

原因很簡單。按鍵對字典進行排序,然後使用理解創建新字典。但是,在創建字典並將其傳遞給創建的構造函數時,它已經忘記了順序。

讓我們將您的字典理解成一個列表理解:

In [413]: [(x, h[x]) for x in sorted(h, key=lambda x : h[x])] 
Out[413]: [('hello', 5), ('fgfgggf', 7), ('abcdefgh', 8), ('hlllleleo', 9)] 

而現在,藉助字典同樣的事情:

In [414]: {x : h[x] for x in sorted(h, key=lambda x : h[x])} 
Out[414]: {'abcdefgh': 8, 'fgfgggf': 7, 'hello': 5, 'hlllleleo': 9} 

正如你可以看到,詞典中,你產生沒有任何相似之處到排序的列表理解,因爲生成的字典已經忘記了它的排序。

+0

謝謝,我剛剛得出同樣的結論,因爲我多玩了一會兒。 – user3079275