Python 如何按数字降序对词典排序

Python 如何按数字降序对词典排序,python,Python,如果我有这样一本字典: {'name1':[3],'name2':[1],'name3':[2]} 我如何对其排序,使其按数值顺序打印出这些名称-例如,从最高数字到最低数字,使其看起来像 {'name1':[3],'name3':[2],'name2':[1]} (python 3.3.3)字典不能有顺序。为此,您必须使用集合。OrderedDic这是唯一的方法 from collections import OrderedDict dct = OrderedDict({'name1':[3

如果我有这样一本字典:

{'name1':[3],'name2':[1],'name3':[2]}
我如何对其排序,使其按数值顺序打印出这些名称-例如,从最高数字到最低数字,使其看起来像

{'name1':[3],'name3':[2],'name2':[1]}

(python 3.3.3)

字典不能有顺序。为此,您必须使用集合。OrderedDic这是唯一的方法

from collections import OrderedDict
dct = OrderedDict({'name1':[3],'name2':[1],'name3':[2]})
dct = OrderedDict(sorted(dct.items(), key=lambda t: t[1][0], reverse = True))
print(dct)
结果

OrderedDict([('name1', [3]), ('name3', [2]), ('name2', [1])])
正如所建议的,如果仅用于打印列表,则无需OrderedDict(但使用列表理解)的解决方案:

dct = {'name1':[3],'name2':[1],'name3':[2]}
lst = sorted([[k, v] for k, v in dct.items()], key=lambda ls : ls[1][0], reverse = True)
print(lst)
结果:

>>> 
['name1', [3]]
['name3', [2]]
['name2', [1]]
>>> 

[1]
[2]
。。。不是数值,而是数组。其次,你没有表现出任何努力。第三,当你打印一本字典时,它是随机的,键的排列顺序是随机的,就像Clodion说的,用python是不可能“排序”一个dict的。但是,您可以使用
OrderedDict
创建一个排序字典,而不是使用您当前拥有此注释的字典。请避免将评论粘贴为answers@NickCollins:那么,这是对你的问题的回答吗?如果目标是按顺序打印出来,你甚至不需要一个有序的dict。另外,我怀疑这是有意的,这个值是一个列表。您的答案是按列表的第一项排序。OP似乎是一个初学者,所以也许你想详细介绍一下正在使用的数据结构,让这有点意义:/@enpenax:好吧,当然,不需要有序字典,但它确实更容易!在不转换字典的情况下,尝试基于值对输出进行排序并不是那么简单,不是吗?我不使用列表。但是是的,OP似乎是个初学者。然而,我真的认为这是值得解释的其他方法,不是吗?但是我会试试。我会把解释指向这样一个事实,即作为列表的值是没有用的。此外,OP要求打印,因此添加了如何阅读和排序的dict,以打印它是值得添加的imho:)良好的编辑,感谢您的考虑。