繁体   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