簡體   English   中英

使用排序的內置函數對python dict的值進行排序

[英]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?

這是一個有趣的問題,因為如果鍵是另一個不可索引的類型(比如整數),就不會出現錯誤,這是由於一系列微妙的事情:

  1. sorted(mydict,...)嘗試使用等效的iter(mydict)迭代字典,它將調用mydict.__iter__()
  2. 迭代字典產生其 ,實際上iter(mydict)mydict.iterkeys()相同。
  3. 你的鍵是字符串,因為字符串是可索引的,所以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.

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