這似乎是它必須是一個傻瓜,但我的SO-搜索夫今天是差...排序按值字典然後按鍵
說我有整數鍵/值的字典,怎麼能我按降序對字典進行排序,然後按鍵降序排列(對於常見值)。
輸入:
{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)]
這似乎是它必須是一個傻瓜,但我的SO-搜索夫今天是差...排序按值字典然後按鍵
說我有整數鍵/值的字典,怎麼能我按降序對字典進行排序,然後按鍵降序排列(對於常見值)。
輸入:
{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
以降序而不是升序顯示結果。
查看此wiki page瞭解有關Python中排序的優秀教程。
PS。我嘗試使用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的內置功能。 – EOL
我沒有得到相同的輸出......我找到了第一版的答案,它完全符合我的需要。 –
不錯,但有點cri ... ......但我想不出任何簡單的事情。 – Don