tca*_*chy 32 python sorting dictionary
我可以按键或值排序,但我需要按值排序,然后按键排序,在一行中.为了更好地解释这一点,我可以告诉你我的问题:
dict = {'apple': 2, 'banana': 3, 'almond':2 , 'beetroot': 3, 'peach': 4}
Run Code Online (Sandbox Code Playgroud)
我希望我的输出按其值降序排序,然后按键(按字母顺序)升序(AZ).导致这样的清单:
随着输出: ['peach', 'banana', 'beetroot', 'almond', 'apple']
到目前为止我知道如何做的唯一方法是:
[v[0] for v in sorted(dict.items(), key=lambda(k,v): (v,k))]
Run Code Online (Sandbox Code Playgroud)
随着输出: ['almond', 'apple', 'banana', 'beetroot', 'peach']
因此,它按升序对值进行排序,按升序(AZ)按字母顺序对键进行排序.所以如果我扭转这个:
[v[0] for v in sorted(dict.items(), key=lambda(k,v): (v,k), reverse=True)]
Run Code Online (Sandbox Code Playgroud)
随着输出: ['peach', 'beetroot', 'banana', 'apple', 'almond']
它按降序对值进行排序,按字母顺序按降序排序(ZA).
有没有办法我可以按降序对值进行排序,按升序排列键(即AZ)并获得上面显示的输出?
Ign*_*ams 44
您需要利用值为数字的事实.
>>> [v[0] for v in sorted(d.iteritems(), key=lambda(k, v): (-v, k))]
['peach', 'banana', 'beetroot', 'almond', 'apple']
Run Code Online (Sandbox Code Playgroud)
对于可忽略的数量,按递减值排序是按递增的负值排序.
[v[0] for v in sorted(dict.items(), key=lambda(k,v): (-v,k))]
Run Code Online (Sandbox Code Playgroud)