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。