且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

按值排序字典,然后按键

更新时间:2023-02-06 13:58:12

您需要充分利用这些值是数字。

 >>> [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']