Python Sorted:按值排序字典(DESC),然后按键(ASC)

问题描述:

发现惊人的排序后(),我再次陷入困境。Python Sorted:按值排序字典(DESC),然后按键(ASC)

问题是我有一个表单字符串(键)的字典:整数(值),我需要按其整数值降序排序,但如果两个元素在哪里有相同的值,然后按升序关键的顺序。

一个例子可以很清楚的:

d = {'banana':3, 'orange':5, 'apple':5} 
    out: [('apple', 5), ('orange', 5), ('banana', 3)] 

在像做了一些研究,我赶到后:

sorted(d.items(), key=operator.itemgetter(1,0), reverse=True) 
    out: [('orange', 5), ('apple', 5), ('banana', 3)] 

这是因为它的逆排序两者的价值和关键。我需要把钥匙取消。

我真的很感谢这里的帮助。提前致谢!

喜欢的东西

In [1]: d = {'banana': 3, 'orange': 5, 'apple': 5} 

In [2]: sorted(d.items(), key=lambda x: (-x[1], x[0])) 
Out[2]: [('apple', 5), ('orange', 5), ('banana', 3)] 

  • 字典不能直接排序,所以你需要将项目,而不是进行排序(),包含键/值对元组的列表。

  • 由于您想按值字段进行排序,因此需要从元组中提取这些字段以用作使用operator.itemgetter的排序关键字,该关键字获取指定的字段。

  • 最后,要对一个字段的降序进行排序并对另一个字段进行降序排序,先进行两次传递,首先通过二级密钥升序进行排序,然后再通过主键降序进行另一次传递排序。这一步依赖于Python的sort stability

例如:

import operator 
In [1]: d = {'banana': 3, 'orange': 5, 'apple': 5} 

In [2]: fruit = sorted(d.items(), key=operator.itemgetter(0)) 
In [3]: sorted(fruit, key=operator.itemgetter(1), reverse=True) 
Out[3]: [('apple', 5), ('orange', 5), ('banana', 3)] 

有关详细信息,请参阅Python Sorting-HOWTO guide