簡體   English   中英

如何使用內部列表的值對字典進行排序(兩個連續條件)

[英]How sort a dict using the values of a list inside (two sequential criteria)

我需要用兩個連續的標准對這個字典進行排序:“等級”降序,“水果”升序(如果排名結果相同)。

字典是這樣構成的

'object':['fruit',rank]

例如,我已經:

myDict = {'item2': ['bananas', 3], 'item3': ['cocumbers', 11], 'item1': ['pinapples', 3], 'item4': ['pears', 3]}

我的目標是獲得此:

{'item3': ['cocumbers', 11], 'item2': ['bananas', 3],'item4': ['pears', 3], 'item1': ['pinapples', 3]}

sorted(myDict.items(), key=lambda (k, v): v[1], reverse=True)

我只獲得正確的等級排序,而沒有獲得具有相同等級的對象的排序順序:

[('item3', ['cocumbers', 11]), ('item2', ['bananas', 3]), ('item1', ['pinapples', 3]), ('item4', ['pears', 3])]

如何在python 2.7中解決這個問題?

謝謝

sorted(myDict.items(), key=lambda (k, v): (-v[1],v[0]))

應該可以。 由於rank是一個整數,我們可以通過使key函數只返回負值而不是需要reverse=True關鍵字來對sort進行排序,從而輕松地使其降序sorted 如果是平局,我們會退回到弦的自然順序。

之所以tuples是因為python中的序列按字典順序排序( tuples是序列類型) tuples按順序比較每個序列中的元素,直到其中一個元素不相等為止,從而給出了一對序列的順序。

如果您無法輕松地用鍵函數替換reverse=True ,則需要進行兩次排序:

l1 = sorted(myDict.items(),key=lambda (k,v):v[0])
l1.sort(key=lambda (k,v):v[1],reverse=True)

這取決於有記錄的事實,即python排序必須穩定。 換句話說,元素的相對順序在排序前后是相同的。

您將需要使用collections.OrderedDict來維護字典中的順序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM