当我们得到的只是dict.sort()
不带参数时,我们如何在 Python 2.3 中按值对字典进行排序。我可以使用sorted(dict.items(), lambda x, y: cmp(x[1], y[1]), reverse=True)
较新的 Python 进行排序。
需要的是: 示例:
d = {'a':2,'b':1,'c':3}
排序后:
[('c':3),('a':2),('b':1)]
请问有什么提示吗?谢谢 !
当我们得到的只是dict.sort()
不带参数时,我们如何在 Python 2.3 中按值对字典进行排序。我可以使用sorted(dict.items(), lambda x, y: cmp(x[1], y[1]), reverse=True)
较新的 Python 进行排序。
需要的是: 示例:
d = {'a':2,'b':1,'c':3}
排序后:
[('c':3),('a':2),('b':1)]
请问有什么提示吗?谢谢 !
在新版本中有很多我们认为理所当然的事情......
无论如何,施瓦茨变换:
>>> 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)]
来自文档:“sort() 方法采用一个可选参数,指定 2 个参数(列表项)的比较函数,该函数应返回 -1、0 或 1,具体取决于第一个参数是否被认为小于、等于或大于第二个参数”
所以你想要类似的东西
lst = d.items()
lst.sort(lambda a,b: b[1]-a[1])
返回
[('c', 3), ('a', 2), ('b', 1)]
编辑: lambda 函数是一个比较器。对于普通的升序排序,如果 a<b,则返回值 <0,如果 a==b,则返回 ==0,如果 a>b,则返回 >0。获得这个的简单方法是 ab。
我们想以相反的顺序排序 - 所以我们颠倒比较器的符号,如果 a>b (等等)返回一个值 <0 ......并且获得它的简单方法是 ba。
我们对每个项目的第二个成员进行排序,因此比较器变为 b[1]-a[1],如上。