dic = {'Tea': 35, 'Coffee': 35, 'Chocolate': 10}
我想按降序排序字典的值,但我怎樣才能訪問鍵?如何使用值對字典進行排序並且還能夠訪問鍵
示例代碼:
for x in sorted(dic.values()):
print(key, dic[key])
我也很喜歡輸出可以按字母者皆當值相等排序。
預期輸出:
Coffee 35
Tea 35
Chocolate 10
dic = {'Tea': 35, 'Coffee': 35, 'Chocolate': 10}
我想按降序排序字典的值,但我怎樣才能訪問鍵?如何使用值對字典進行排序並且還能夠訪問鍵
示例代碼:
for x in sorted(dic.values()):
print(key, dic[key])
我也很喜歡輸出可以按字母者皆當值相等排序。
預期輸出:
Coffee 35
Tea 35
Chocolate 10
你想要的是the dict.items()
method,它提供了(key, value)
元組。
若要按值排序,那麼你用一個key
方法,在這種情況下,operator.itemgetter()
從元組取第二個值進行排序,然後將reverse
屬性,讓他們在你想要的順序。
>>> from operator import itemgetter
>>> dic={'Tea': 35, 'Coffee': 35, 'Chocolate': 10}
>>> for key, value in sorted(dic.items(), key=itemgetter(1), reverse=True):
... print(key, value)
...
Tea 35
Coffee 35
Chocolate 10
編輯:如果您想通過鍵作爲輔助排序排序,我們可以簡單地通過數值的元組,以及Python將排序的第一個值,然後第二個,等等......唯一的問題正在使用反向意味着我們將它們按錯誤順序排列。作爲一個黑客,我們簡單地使用值的負版本排序無反向:
>>> for key, value in sorted(dic.items(), key=lambda x: (-x[1], x[0])):
... print(key, value)
...
Coffee 35
Tea 35
Chocolate 10
你的答案返回'茶35咖啡35巧克力10'。 –
@ user1374499您從未爲具有相同值的項目定義訂單,在這種情況下應該應用什麼規則?我假設字母基於關鍵。 –
我發佈了問題所需的輸出。 –
一個選項:
for key in sorted(dic, key=dic.get, reverse=True):
print(key,dic[key])
這個排序字典的鍵,但使用dic.get
的關鍵功能,通過價值從而有效地排序。你的示例輸出表明你想按降序排序,所以我包括reverse=True
。
編輯如果您的字典值實際上是計數,您可以考慮使用collections.Counter
而不是dicitonary。該課程有一個方法most_common()
,它以所需順序返回項目。
雖然這可行,但確實意味着您必須從字典中檢索兩次值。雖然這是字典上的快速操作,但它仍然有點不雅。 –
它返回'茶35 咖啡35 巧克力10',這是我所期望的不同。 –
@Lattyware我同意你所說的,但這比你的方法簡單得多。使用'key = itemgetter(1)'不如這個imo清晰。 – jamylak
其他的答案這表明dict.items()
是部分正確。但是,如果你想在排序過程中包含關鍵字(如果我理解你是正確的),你想要顛倒這些項目(其實質上是一個元組(key, value)
)。所以請使用
data={'Tea': 35, 'Coffee': 35, 'Chocolate': 10}
for item in sorted(dic.items(), key=lambda it: (-it[1], it[0])):
print item
key
參數給出了用於分揀項目的功能。它將項目轉換爲一個密鑰,然後真正用於排序。
在你的情況,你想有一個混合升/降排序,所以這裏提供的項目首先變成
(-35, 'Coffee')
(-35, 'Tea')
(-10, 'Chocolate')
,並依次打印。 (替換過程僅僅用於排序目的,實際返回的項目是原始的。)
這是行不通的 - 一方面,它會從最小到最高,爲兩個,lambda只會得到一個參數。 –
請不要太快用downvoting。 :-)我現在糾正它。 – glglgl
是的,但現在它只是我的答案的重複。 –
提示:請看'.items()'方法。 –
您可以編輯您的問題以顯式聲明排序順序您正在尋找?這聽起來像你想先按降序對值進行排序,然後按字母順序按名稱排序。是對的嗎? – senderle