按值排序字典并返回字典,而不是元组列表
可能重复:
Python:按值排序字典
d = {"a":4, "b":12, "c":2}
如果我用lambda使用sorted():
s = sorted(d.items(), key=lambda(k,v):(v,k))
我得到一个列表元组(键,值),但我再次需要一个字典:
{"c":2, "a":4, "b":12}
做dict(the_list_of_tuples)
你回到dict(the_list_of_tuples)
。
标准dict
对象没有排序,所以不保证或保留任何顺序。 这是因为你通常使用一个字典来获取一个键值的排序是不重要的。
如果你想保持排序,你可以使用OrderedDict
。 这并没有排序,但确实记得项目添加到它的顺序。 因此,您可以按排序顺序使用您的键值对创建一个:
>>> d = {"a":4, "b":12, "c":2}
>>> from collections import OrderedDict
>>> od = OrderedDict(sorted(d.items(), key=lambda(k,v):(v,k)))
>>> od
OrderedDict([('c', 2), ('a', 4), ('b', 12)])
这是不可能的。 你只能得到一个你喜欢的字典的排序表示。
编辑
刚做了一些研究。 看起来Python 2.7有一个叫做OrderedDict的东西,它可以让你做到这一点。 以下是关于它的更多信息:http://docs.python.org/library/collections.html?highlight=ordereddict#ordereddict-examples-and-recipes
正如其他许多人指出的那样,你不能像Python那样不允许你这样做(除了有序的字典)。 无论如何你可以实现的是类似的东西(python <2.7)
>>> d = {"a":4, "b":12, "c":2}
>>> z = [(i,d[i]) for i in d]
>>> z.sort(key=lambda x: x[1])
>>> z
[('c', 2), ('a', 4), ('b', 12)]
而且,现在d被排序,你可以对它进行二分法搜索以得到你想要的结果(或者如果你不太在意速度,则可以进行正常的迭代)。
链接地址: http://www.djcxy.com/p/18155.html