按值排序字典,然后按键 [英] Sorting a dictionary by value then key
问题描述
dict = {'apple':2,'banana' '杏仁':2,'甜菜根':3,'桃':4}
输出按照它们的值进行排序,然后按照字母顺序递增(AZ)。产生以下列表:
输出为: ['peach','banana','beetroot','almond'苹果']
到目前为止,我知道如何做的唯一方法是:
对于v的排序(dict.items(),key = lambda(k,v):(v,k))中的v,对于v的[pre>
] [v [0]]
输出: ['almond','apple','banana','beetroot' ,'peach']
所以它按升序排列了按字母顺序排列的值(AZ)。所以如果我反过来:
[v [0] for v in sorted(dict.items(),key = lambda k,v):(v,k),reverse = True)]
输出: ['peach','beetroot','banana','apple','almond']
已经按降序排列了按字母顺序排列的值(ZA)。
有没有办法可以按降序排列值,按键升序排列(即AZ),并获得上面显示的输出?
解决方案您需要充分利用这些值是数字。
>>> [v [0] for v in sorted(d.iteritems(),key = lambda(k,v):(-v,k))]
['peach','banana','beetroot' '杏仁','苹果']
I can sort by key or value, but I need it sorted by value, then key, in one line. To explain this better I can show you my problem:
dict = {'apple': 2, 'banana': 3, 'almond':2 , 'beetroot': 3, 'peach': 4}
I want my output to be sorted descending by their value and then ascending (A-Z) by their key (alphabetically). Resulting in such a list:
With the output of: ['peach', 'banana', 'beetroot', 'almond', 'apple']
The only way I know how to do it so far is:
[v[0] for v in sorted(dict.items(), key=lambda(k,v): (v,k))]
With the output of: ['almond', 'apple', 'banana', 'beetroot', 'peach']
So it has sorted the values in ascending order and the keys alphabetically in ascending order (A-Z). So if I reverse this:
[v[0] for v in sorted(dict.items(), key=lambda(k,v): (v,k), reverse=True)]
With the output of: ['peach', 'beetroot', 'banana', 'apple', 'almond']
It has sorted the values in descending order and the keys alphabetically in descending order (Z-A).
Is there a way I can sort the values in descending order and the keys in ascending order (i.e. A-Z) and get the output I showed above?
解决方案 You need to take advantage of the fact that the values are numbers.
>>> [v[0] for v in sorted(d.iteritems(), key=lambda(k, v): (-v, k))]
['peach', 'banana', 'beetroot', 'almond', 'apple']
这篇关于按值排序字典,然后按键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!