Python 按反向值然后按非反向键对字典排序
我有一个字典,其中包含我想要排序的字符串键和int值。我希望它首先按递减的数值编号排序,然后按字母顺序排序 例如,如果您有一本包含以下内容的词典: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()
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中的稳定排序。并非完全重复,但“按值降序排序,然后按键升序排序”的答案比我的答案更简单;我喜欢它!:)