簡體   English   中英

python根據值對字典進行排序,如果值重復則根據鍵排序

[英]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鍵,初始化的rankvalueranks通過按鍵引用和迭代。 對於每個鍵,如果前一個value與此鍵的值不同,則rank會增加。 由於True等價於1False等價於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.

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