这似乎是一个重复的问题,但我的搜索技能今天不太好...
假设我有一个整数键/值的字典,如何按值降序排列字典,然后按键降序排列(对于相同的值)。
输入:
{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)]
这似乎是一个重复的问题,但我的搜索技能今天不太好...
假设我有一个整数键/值的字典,如何按值降序排列字典,然后按键降序排列(对于相同的值)。
输入:
{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)]
In [62]: y={100:1, 90:4, 99:3, 92:1, 101:1}
In [63]: sorted(y.items(), key=lambda x: (x[1],x[0]), reverse=True)
Out[63]: [(90, 4), (99, 3), (101, 1), (100, 1), (92, 1)]
key=lambda x: (x[1],x[0])
参数告诉sorted
函数,对于每个y.items()
中的项x
,使用(x [1],x [0])
作为排序的代理值。因为x
的形式是(key,value)
,所以(x [1],x [0])
将产生(value,key)
。这使得sorted
首先按value
进行排序,然后按key
进行比较。
reverse=True
参数告诉sorted
按降序而不是升序呈现结果。key=reversed
,但是reversed(x)
返回一个迭代器,无法在此处进行比较。>>> 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)]
试试这个:
>>> 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])