2014-09-25 70 views
2

我有一本字典作爲排序詞典,按降序排列,如果衝突然後按鍵

r = {1: 4, 2: 4, 4: 4, 5: 4, 6: 10} 

我想基於值(降序)進行排序這一點,如果衝突的鍵,然後排序值(升序)。 即輸出應該是

[6 ,1 ,2 ,4 ,5] 

我該怎麼做?

如果我有列表而不是字典,上面會很容易嗎?即

r = [(1, 4), (2, 4), (4, 4), (5, 4), (6, 10)] 

回答

4

使用key參數sorted()以產生用於每個元素的元組:基於所述

sorted(r, key=lambda k: (r[k], -k), reverse=True) 

sorted(r, key=lambda k: (-r[k], k)) 

現在鍵將被排序(在反向) (value, negative key)元組,或在(negative value, key)元組上排序(向前)。元組按照字典順序排序,因此通過對關鍵字進行排序可以中斷相同值之間的關係。通過否定數值或鍵,您會影響反向排序。

演示:

>>> r = {1: 4, 2: 4, 4: 4, 5: 4, 6: 10} 
>>> sorted(r, key=lambda k: (r[k], -k), reverse=True) 
[6, 1, 2, 4, 5] 
>>> sorted(r, key=lambda k: (-r[k], k)) 
[6, 1, 2, 4, 5]