使用排序内置函数对python dict值进行排序

2024-05-14 00:58:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要得到dict的排序表示,按值的降序排序(dict中的最大值将首先显示)。在

样品:

mydict={u'jon':30,u'den':26,u'rob':42,u'jaime':31}

我要让他们知道

^{pr2}$

我试过了

from operator import itemgetter
sortedvalues=sorted(mydict,key=itemgetter(1))

当我打印清单时

[u'jaime', u'den', u'rob', u'jon']

这个列表无序!我是否遗漏了一些关于排序内置项的用法的信息?或者我没有正确地使用item getter?在


Tags: fromimport排序样品operatordictmydictrob
3条回答

迭代字典(这是sorted函数所做的)将只给你它的键:

>>> sorted(mydict)
[u'den', u'jaime', u'jon', u'rob']

相反,您需要同时对键和值进行排序-为此,您可以使用mydict.items()(或{},这对于大dict更有效):

^{pr2}$

然后您的代码将按预期工作:

>>> 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)]

这是一个有趣的问题,因为如果键是另一个不可索引的类型(比如整数),则不会导致错误,这是由一系列微妙的事情造成的:

  1. sorted(mydict,…)尝试使用iter(mydict)的等价词迭代字典,它将调用mydict.__iter__()
  2. 迭代字典会产生它的,实际上iter(mydict)与{}相同。在
  3. 您的键是字符串,由于字符串是可索引的,itemgetter(1)将处理一个字符串值,从而获得字符串中的第二个字符。在

如果任何字符串也有1个字符的长度,那么您所拥有的代码就会因索引器错误而失败,您只是幸运而已。(或者没有,这取决于您如何看待它,因为获得索引器会让您更快地意识到问题。)

如果只需要这些值,您需要做的是:

sorted(mydict.values(), reverse=True)

如果你想要钥匙成对的话

^{pr2}$

它们按名称中的第二个字母排序;迭代dict得到它的键。在

sorteditems = sorted(mydict.iteritems(), key=itemgetter(1))

相关问题 更多 >