Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按反向值然后按非反向键对字典排序_Python_Sorting_Dictionary - Fatal编程技术网

Python 按反向值然后按非反向键对字典排序

Python 按反向值然后按非反向键对字典排序,python,sorting,dictionary,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()

我有一个字典,其中包含我想要排序的字符串键和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()
方法,但它可以反转键和值,也可以不反转键和值。如何仅通过一次反转进行排序?谢谢你的帮助

只需对该值求反并将其用作主键:

>>> 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)]
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)]

由于排序在Python中是稳定的,因此您可以简单地对其进行两次排序:首先按次键排序,然后按主键排序:

>>> 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)]
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)]

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

并非完全重复,但“按值降序排序,然后按键升序排序”的答案比我的答案更简单;我喜欢它!:)