2014-02-06 81 views
2

這是一個新手問題,我無法找到一個確切的答案。我想按照價值從大到小排序。即...Python字典使用Sorted排序

dict = {'ann': 9, 'tom': 21, 'eddie': 12, 'fred': 5} 

我知道這個工程...

>>> sorted(dict.items(), key=lambda x: x[1], reverse=True) 
[('tom', 21), ('eddie', 12), ('ann', 9), ('fred', 5)] 

但我想了解這部分是如何工作的?

x: x[1] 

這是如何匹配值屬性?

回答

1

dict.items()返回(key, value)雙列表,x[1]僅僅是對所述部分value

>>> d = {'ann': 9, 'tom': 21, 'eddie': 12, 'fred': 5} 
>>> d.items() 
[('ann', 9), ('fred', 5), ('eddie', 12), ('tom', 21)] 
>>> d.items()[0] 
('ann', 9) 
>>> d.items()[0][1] 
9 
>>> (lambda x: x[1])(d.items()[0]) 
9 

sorted()在輸入序列(因此('ann', 9)等)的每個元素通入key功能。 x然後是('ann', 9)x[1]9

+0

太棒了,這很有道理 - 感謝Martijn! – user3280412

0

讓我解釋一下怎麼回事:

你的字典:

d = { '安':9, '湯姆':21, '埃迪':12, '弗雷德' :5}

下面是整理的使用幫助,說:

sorted(...) 
    sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list 

讓分解:

從您snipet:排序(dict.items(),鍵=拉姆達X:X [1],反向=真)

迭代:d.items()

which is list of tuples, 

>>> d.items() 
[('ann', 9), ('fred', 5), ('eddie', 12), ('tom', 21)] 
>>> 

鍵=拉姆達X:X [1]

NB:關鍵參數來指定一個函數應用於每個列表元素上進行比較之前被調用。

讓適用於您的情況:

>>> key = lambda x: x[1] 
>>> map(key, d.items()) 
[9, 5, 12, 21] 
>>> 

這給了字典的值。

reverse = True顯示在下面,希望你能從例子中容易理解。

>>> l = [3,2,4,1] 
>>> sorted(l) 
[1, 2, 3, 4] 
>>> sorted(l, reverse=True) 
[4, 3, 2, 1] 
>>> 

結論:

你在倒車基於價值d[1]即價值一本字典和扭轉它。 最終結果是元組列表i。e元組[0] =鍵,元組[1] =值。