0

当我们得到的只是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)]

请问有什么提示吗?谢谢 !

4

2 回答 2

6

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

无论如何,施瓦茨变换

>>> 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)]
于 2012-06-15T02:40:47.373 回答
3

来自文档:“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],如上。

于 2012-06-15T02:43:28.993 回答