当我们得到的是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)]
请提示吗?谢谢!
答案 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],如上所述。