按REVERSE VALUE排序字典,然后按NON-REVERSE KEY排序

时间:2016-06-05 02:35:38

标签: python sorting dictionary

我有一个字典,其中包含我想要排序的字符串键和int值。我希望首先按减少数值排序,然后按字母顺序排序。

例如,如果你有一个字典包含:

my_dict = {'zebra':1, 'the':201, 'apple':1, 'chicken':58}

生成的排序列表将包含:

{('the', 201), ('chicken', 58), ('apple', 1), ('zebra', 1)

目前我正在使用以下内容:

my_list = sorted(my_dict.items(), key=lambda x: (x[1],x[0])

我得到的列表首先按升序排序,然后按字母顺序排序。

如何反转值而不是键?我知道你可以将第三个参数reverse=[boolean]传递给sorted()方法,但它要么反转BOTH键和值。怎么可以只通过一次逆转排序?谢谢你的帮助!

2 个答案:

答案 0 :(得分:5)

只是否定该值并将其用作主键:

>>> my_dict = {'zebra':1, 'the':201, 'apple':1, 'chicken':58}
>>> sorted(my_dict.items(), key=lambda x: (-x[1], x[0]))
[('the', 201), ('chicken', 58), ('apple', 1), ('zebra', 1)]

答案 1 :(得分:0)

由于Python中的排序是稳定的,您可以简单地对它进行两次排序:首先是辅助密钥,然后是主键:

In [29]: from operator import itemgetter
In [30]: my_dict = {'zebra':1, 'the':201, 'apple':1, 'chicken':58}
In [31]: my_list = sorted(sorted(my_dict.iteritems(), key=itemgetter(0)), key=itemgetter(1), reverse=True)

In [32]: my_list
Out[32]: [('the', 201), ('chicken', 58), ('apple', 1), ('zebra', 1)]

This documentation更详细地解释了Python中的稳定排序。