[英]sorting values of python dict using sorted builtin function
我需要得到一個dict的有序表示,按值的降序排序(dict中的最大值,首先顯示)。
樣品:
mydict={u'jon':30,u'den':26,u'rob':42,u'jaime':31}
我需要向他們展示
rob=42
jaime=31
jon=30
den=28
我試過這個
from operator import itemgetter
sortedvalues=sorted(mydict,key=itemgetter(1))
當我打印列表時,我得到了
[u'jaime', u'den', u'rob', u'jon']
這個清單是無序的! 我錯過了有關排序內置的用法嗎? 還是我錯誤地使用了itemgetter?
這是一個有趣的問題,因為如果鍵是另一個不可索引的類型(比如整數),就不會出現錯誤,這是由於一系列微妙的事情:
iter(mydict)
迭代字典,它將調用mydict.__iter__()
iter(mydict)
與mydict.iterkeys()
相同。 itemgetter(1)
將處理字符串值,獲取字符串中的第二個字符。 如果任何字符串都有1個字符長度,那么你所擁有的代碼會因為IndexError而失敗,你只是幸運的。 (或者沒有,取決於你如何看待它,因為獲得IndexError會讓你更快意識到這個問題。)
如果您只想要值,您想要做的是:
sorted(mydict.values(), reverse=True)
如果你想要成對的鑰匙,你想要的
sorted(mydict.iteritems(), key=itemgetter(1), reverse=True)
它們按名稱中的第二個字母排序; 迭代dict產生它的鍵。
sorteditems = sorted(mydict.iteritems(), key=itemgetter(1))
迭代字典(這是sorted
函數所做的)將只給你它的鍵:
>>> sorted(mydict)
[u'den', u'jaime', u'jon', u'rob']
相反,你想要對鍵和值進行排序 - 為此,你可以使用mydict.items()
(或mydict.iteritems()
,這對於大型mydict.iteritems()
更有效):
>>> sorted(mydict.items())
[(u'den', 26), (u'jaime', 31), (u'jon', 30), (u'rob', 42)]
然后您的代碼將按預期工作:
>>> from operator import itemgetter
>>> sorted(mydict.items(), key = itemgetter(1))
[(u'den', 26), (u'jon', 30), (u'jaime', 31), (u'rob', 42)]
如果多個鍵具有相同的值,您可能還希望使用dict的鍵作為輔助排序值進行排序:
>>> mydict={u'a': 1, 'z': 1, 'd': 1}
>>> sorted(mydict.items(), key = itemgetter(1))
[(u'a', 1), ('z', 1), ('d', 1)]
>>> sorted(mydict.items(), key = itemgetter(1, 0))
[(u'a', 1), ('d', 1), ('z', 1)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.