关于python:按值排序dict并返回dict,而不是元组列表

Sort dict by value and return dict, not list of tuples

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Python: Sort a dictionary by value

1
d = {"a":4,"b":12,"c":2}

如果将sorted()与lambda一起使用:

1
s = sorted(d.items(), key=lambda(k,v):(v,k))

我得到一个列表元组(键,值)但我想再做一次听写:

1
{"c":2,"a":4,"b":12}

做EDOCX1[0]你就回到正题了。


标准的dict对象没有排序,因此不保证或保留任何排序。这是因为通常使用dict by get值进行键排序并不重要。

如果您想保留订单,可以使用OrderedDict。这不会排序,但会记住添加项目的顺序。因此,可以按排序顺序使用键值对创建一个:

1
2
3
4
5
>>> 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不允许这样做(除了有序的dict)。您可以实现的是类似的东西(python<2.7)

1
2
3
4
5
>>> 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进行了排序,您可以对其执行二进制搜索,以得到您想要的结果(如果您不太关心速度,也可以进行正常的迭代)。


这是不可能的。你只能像现在这样得到听写的排序表示。

编辑

只是做了些调查。看来python 2.7有一个名为ordereddict的东西,它允许您这样做。以下是关于它的更多信息:http://docs.python.org/library/collections.html?highlight=ordereddict ordereddict示例和配方