Python 2.3仅使用.Sort()按值排序字典

时间:2012-06-15 02:35:24

标签: python sorting dictionary python-2.3

当我们得到的是dict.sort()不带参数时,我们如何按Python 2.3中的值对字典进行排序。我可以在较新的Python中使用sorted(dict.items(), lambda x, y: cmp(x[1], y[1]), reverse=True)进行排序。

需要的是: 例如:

d = {'a':2,'b':1,'c':3}

排序后:

[('c':3),('a':2),('b':1)]

请提示吗?谢谢!

2 个答案:

答案 0 :(得分:7)

我们认为在新版本中有很多事情是理所当然的......

无论如何,Schwartzian Transform

>>> l = [(-x[1], x) for x in d.items()]
>>> l.sort()
>>> l2 = [x[1] for x in l]
>>> l2
[('c', 3), ('a', 2), ('b', 1)]

答案 1 :(得分:3)

来自文档:“sort()方法采用一个可选参数,指定2个参数(列表项)的比较函数,它应该返回-1,0或1,具体取决于第一个参数是否被认为小于,等于to,或大于第二个参数“

所以你想要像

这样的东西
lst = d.items()
lst.sort(lambda a,b: b[1]-a[1])

返回

[('c', 3), ('a', 2), ('b', 1)]

编辑: lambda函数是一个比较器。对于普通的升序排序,如果a&lt; b,== 0,如果a == b,则返回值<0;如果&gt; b,则返回&gt; 0。获得这个的简单方法是a-b。

我们希望按相反的顺序排序 - 所以我们反转比较器的符号,如果&gt; b(等等)返回一个值<0,并且获得这个的简单方法是b-a。

我们正在对每个项目的第二个成员进行排序,因此比较器变为b [1] -a [1],如上所述。