我有一个字典,其中包含我想要排序的字符串键和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键和值。怎么可以只通过一次逆转排序?谢谢你的帮助!
答案 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中的稳定排序。