我是Python的新手,目前正致力於解決問題以提高編程技能。我正在處理一個問題,我需要在Python中使用stable sort
字典。請看以下細節:在Python中對字典值進行穩定排序
輸入:
1 2
16 3
11 2
20 3
3 5
26 4
7 1
22 4
上面的命令,我加爲兩個lists k and v
:
k = ['1', '16', '11', '20', '3', '26', '7', '22']
v = ['2', '3', '2', '3', '5', '4', '1', '4']
我加入這兩個列表成爲一個字典把它作爲一個鍵值對。我已使用OrderDict
,因爲我想讓元素的順序與它們在輸入中的順序相同。
from collections import OrderedDict
d = OrderedDict(zip(k, v))
現在,我需要以按相反的順序字典d
相對於值。 (其實,我做一個穩定的排序,自sorted
在Python是一個穩定的排序,我已經使用了來源:Here)對於:
s = sorted(d, key = itemgetter(1), reverse=True)
預期輸出:
3 5
26 4
22 4
16 3
20 3
1 2
11 2
7 1
但經過我實現了上面的sorted
函數,我無法獲得預期的輸出。我得到IndexError: string index out of range
有人可以告訴我我在哪裏做錯了。我的方法錯誤或流程錯誤?你能否告訴我爲什麼我無法按預期得到產出?提前致謝。任何幫助將非常感激。
感謝您的詳細解釋。我有幾個查詢 - 1.爲什麼字典將鍵和值保留爲字符串,即使所有的值都是整數。 2.只有'd'代替'd.items'有什麼區別嗎?目的是什麼。對不起,如果它聽起來很愚蠢,但我只是想更好地理解。 – Dev
@Dev 1)Python是強類型的。這意味着它不會在類型之間默默轉換;你必須強制它通過鑄造。有一些地方放鬆了一些地方(例如,不同類型之間的數學運算)。即使這些字符串只包含數字字符,它們仍然是字符串,除非明確地將它們轉換爲其他字符,否則將永遠不會被視爲任何不同的東西。 2)迭代只是'd'只會給你鑰匙。 'd.items()'返回(key,value)的元組。基本上,它可以爲您節省一些額外的字典。 – eestrada