按值排序字典然后键

时间:2012-03-29 05:03:58

标签: python sorting dictionary

我可以按键或值排序,但我需要按值排序,然后按键排序,在一行中。为了更好地解释这一点,我可以告诉你我的问题:

dict = {'apple': 2, 'banana': 3, 'almond':2 , 'beetroot': 3, 'peach': 4}

我希望我的输出按其值降序排序,然后按键(按字母顺序)升序(A-Z)。导致这样的清单:

输出:['peach', 'banana', 'beetroot', 'almond', 'apple']

到目前为止我知道如何做的唯一方法是:

[v[0] for v in sorted(dict.items(), key=lambda(k,v): (v,k))]

输出:['almond', 'apple', 'banana', 'beetroot', 'peach']

因此它按升序对值进行排序,按升序(A-Z)按字母顺序对键进行排序。所以,如果我扭转这一点:

[v[0] for v in sorted(dict.items(), key=lambda(k,v): (v,k), reverse=True)]

输出:['peach', 'beetroot', 'banana', 'apple', 'almond']

它按降序对值进行排序,按字母顺序按降序排列(Z-A)。

有没有办法可以按降序对值进行排序,按升序排列键(即A-Z),得到上面显示的输出?

3 个答案:

答案 0 :(得分:39)

您需要利用值为数字的事实。

>>> [v[0] for v in sorted(d.iteritems(), key=lambda(k, v): (-v, k))]
['peach', 'banana', 'beetroot', 'almond', 'apple']

答案 1 :(得分:5)

按递减值排序,对于可忽略的数量,按递增的负值排序。

[v[0] for v in sorted(dict.items(), key=lambda(k,v): (-v,k))]

答案 2 :(得分:1)

>>> d = {'apple':2, 'banana':3, 'almond':2, 'beetroot':3, 'peach':4}
>>> [k for k, v in sorted(d.iteritems(), key=lambda(k, v): (-v, k))]
['peach', 'banana', 'beetroot', 'almond', 'apple']