[英]python sorting a dictionary based on values, and order based on key if values are repeating
如何有效地在二維中對字典進行排序字典是這樣的,我需要根據每個鍵的值對每個鍵進行排名,其中最高值獲得最小排名。 如果 2 個鍵具有相同的值,則它們按字典順序排列:
d = {'T': 1500, 'L': 1000, 'P': 1500, 'G': 6500, 'B': 7000}
預期輸出:
1 : B
2 : G
3 : P
3 : T
4 : L
這里因為 T 和 P 的值是重復的,所以它們要按字母順序排序
首先按鍵排序,然后按降序排序:
>>> d = {'T': 1500, 'L': 1000, 'P': 1500, 'G': 6500, 'B': 7000}
>>> sorted(sorted(d), key=d.get, reverse=True)
['B', 'G', 'P', 'T', 'L']
第二次排序不會更改具有相等值的條目的先前排序順序。
您還可以使用tuple
按多個鍵進行排序:
>>> d = {'T': 1500, 'L': 1000, 'P': 1500, 'G': 6500, 'B': 7000}
>>> sorted(d, key=lambda x: (-d.get(x), x))
['B', 'G', 'P', 'T', 'L']
保存排序:要分配相同的“等級”,以具有相同值的鍵list
鍵,初始化的rank
, value
和ranks
通過按鍵引用和迭代。 對於每個鍵,如果前一個value
與此鍵的值不同,則rank
會增加。 由於True
等價於1
, False
等價於0
,我們可以簡單地將比較的結果直接添加到rank
。 然后我們保存當前鍵的value
以與下一個進行比較。 最后,將其添加到以key
為鍵、以rank
為值的ranks
字典中。
>>> value = 0
>>> rank = 0
>>> ranks = {}
>>> for key in s:
... rank += value != d[key]
... value = d[key]
... ranks[key] = rank
...
現在很容易遍歷這個字典並打印你正在尋找的結果:
>>> for k in s:
... print('{}: {}'.format(ranks[k], k))
...
1: B
2: G
3: P
3: T
4: L
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.