如何有效地對字典進行二維排序 字典是這樣的,我需要根據它的值的關鍵與最高值獲得最低等級。如果2個鍵具有然後相同的值它們被排序在詞典編纂順序:蟒蛇基於值排序字典,並基於鍵的順序,如果值重複
d = {'T': 1500, 'L': 1000, 'P': 1500, 'G': 6500, 'B': 7000}
預期輸出:
1 : B
2 : G
3 : P
3 : T
4 : L
在這裏,因爲它們是按字母順序排列
進行排序的T和P重複進行值如何有效地對字典進行二維排序 字典是這樣的,我需要根據它的值的關鍵與最高值獲得最低等級。如果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']
的塞康d排序不會更改以前排序的具有相同值的條目的順序。
你也可以使用一個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
以與下一個密鑰進行比較。最後,將此添加到ranks
字典中,其中key
爲鍵,rank
爲值。
>>> 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
它的工作原理。 Thnx ... – prime130392
@ prime130392 - 我添加了一種方法來確定並保存每個鍵的等級。 – TigerhawkT3
的*什麼*預期的輸出?無論如何,你不能排序字典。你需要一個不同的數據結構。 – juanchopanza
看起來你想按字典的值排序字典的鍵;那是對的嗎?閱讀[Python sorting howto](https://wiki.python.org/moin/HowTo/Sorting)可能會很好。 – Evert
是否需要P和T(因爲它們具有相同的值)具有相同的等級?或者排名第3和第4位是合適的,只要這些排序是按照字典順序排列的。 – Evert