我需要得到一个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
这是一个有趣的问题,因为如果键是另一个不可索引的类型(比如整数),就不会出现错误,这是由于一系列微妙的事情:
iter(mydict)调用字典mydict.__iter__()iter(mydict)是相同的mydict.iterkeys().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)
它们按名称中的第二个字母排序; 迭代dict产生它的键.
sorteditems = sorted(mydict.iteritems(), key=itemgetter(1))
Run Code Online (Sandbox Code Playgroud)