2014-02-06 58 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] =值。