Python 先按值再按键对字典排序

Python 先按值再按键对字典排序,python,Python,这似乎是一个骗局,但我的搜索功能今天很差 假设我有一个整数键/值的字典,我如何按值降序排序字典,然后按键降序排序(对于公共值) 输入: {12:2, 9:1, 14:2} {100:1, 90:4, 99:3, 92:1, 101:1} 输出: [(14,2), (12,2), (9,1)] # output from print [(90,4), (99,3), (101,1), (100,1), (92,1)] 键=lambda x:(x[1],x[0])告诉排序的对于y.item

这似乎是一个骗局,但我的搜索功能今天很差

假设我有一个整数键/值的字典,我如何按值降序排序字典,然后按键降序排序(对于公共值)

输入:

{12:2, 9:1,  14:2}
{100:1, 90:4, 99:3, 92:1, 101:1}
输出:

[(14,2), (12,2), (9,1)]  # output from print 
[(90,4), (99,3), (101,1), (100,1), (92,1)]
键=lambda x:(x[1],x[0])
告诉
排序的
对于
y.items()中的每个项目
x
,使用
(x[1],x[0])
作为要排序的代理值。由于
x
的形式为
(键,键)
(x[1],x[0])
产生
(键,键)
。这会使
排序
首先按
排序,然后按
排序

reverse=True
告诉
sorted
以降序而不是升序显示结果

有关Python中排序的优秀教程,请参见本教程

另外,我尝试使用
key=reversed
,但是
reversed(x)
返回一个迭代器,该迭代器不会根据需要在此处进行比较。

尝试以下操作:

>>> d={100:1, 90:4, 99:3, 92:1, 101:1}
>>> sorted(d.items(), lambda a,b:b[1]-a[1] or a[0]-b[0])

也许这更为明确:

>>> y = {100:1, 90:4, 99:3, 92:1, 101:1}
>>> reverse_comparison = lambda (a1, a2), (b1, b2):cmp((b2, b1), (a2, a1))
>>> sorted(y.items(), cmp=reverse_comparison)
[(90, 4), (99, 3), (101, 1), (100, 1), (92, 1)]

+1:很好地利用了Python的内置功能,我没有得到相同的输出。。。我找到了第一版的答案,它正是我所需要的。很好,但有点离谱。。。但我想不出比这更简单的了。
>>> y = {100:1, 90:4, 99:3, 92:1, 101:1}
>>> reverse_comparison = lambda (a1, a2), (b1, b2):cmp((b2, b1), (a2, a1))
>>> sorted(y.items(), cmp=reverse_comparison)
[(90, 4), (99, 3), (101, 1), (100, 1), (92, 1)]