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]你就回到正题了。
标准的
如果您想保留订单,可以使用
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示例和配方