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

Dam*_*ian 6 python sorting

我需要得到一个dict的有序表示,按值的降序排序(dict中的最大值,首先显示).

样品:

mydict={u'jon':30,u'den':26,u'rob':42,u'jaime':31}
Run Code Online (Sandbox Code Playgroud)

我需要向他们展示

rob=42
jaime=31
jon=30
den=28
Run Code Online (Sandbox Code Playgroud)

我试过这个

from operator import itemgetter
sortedvalues=sorted(mydict,key=itemgetter(1))
Run Code Online (Sandbox Code Playgroud)

当我打印列表时,我得到了

[u'jaime', u'den', u'rob', u'jon']
Run Code Online (Sandbox Code Playgroud)

这个清单是无序的!我错过了有关排序内置的用法吗?还是我错误地使用了itemgetter?

Cra*_*ast 11

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

  1. sorted(mydict,...)尝试使用等效的字典来iter(mydict)调用字典mydict.__iter__()
  2. 迭代字典产生其,实际上iter(mydict)是相同的mydict.iterkeys().
  3. 您的密钥是字符串,并且由于字符串是可索引的,因此itemgetter(1)将处理字符串值,获取字符串中的第二个字符.

如果任何字符串都有1个字符长度,那么你所拥有的代码就会因为IndexError而失败,你很幸运.(或者没有,取决于你如何看待它,因为获得IndexError会让你更快意识到这个问题.)

如果您只想要值,您想要做的是:

sorted(mydict.values(), reverse=True)
Run Code Online (Sandbox Code Playgroud)

如果你想要成对的钥匙,你想要的

sorted(mydict.iteritems(), key=itemgetter(1), reverse=True)
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 5

它们按名称中的第二个字母排序; 迭代dict产生它的键.

sorteditems = sorted(mydict.iteritems(), key=itemgetter(1))
Run Code Online (Sandbox Code Playgroud)