我可以按键或值排序,但我需要按值排序,然后按键排序,在一行中。为了更好地解释这一点,我可以告诉你我的问题:
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),得到上面显示的输出?
答案 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']