按值排序字典并返回字典,而不是元组列表

可能重复:
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

上一篇: Sort dict by value and return dict, not list of tuples

下一篇: Sort Python dict by datetime value