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