将排序从 Python2 转换为 Python3

1 python sorting cmp python-3.x

我已经用Python2编写了一个排序,我试图将其转换为Python3,它要求提供一个密钥并表示没有更多的cmp函数可用:

test.sort(lambda x, y: cmp(x[2],y[2]) or cmp(x[4], y[4]) or cmp(y[9], x[9]))
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

此致,

blu*_*ote 5

官方 python 3 文档在本节中解释了将其从 python 2 转换为 3 的正确方法。

原来的cmp函数只是做了类似的事情

def cmp(x, y):
   if x == y:
       return 0
   elif x > y:
       return 1
   else:
       return -1
Run Code Online (Sandbox Code Playgroud)

也就是说,它相当于sign(x-y),但也支持字符串和其他数据类型。

但是,您的问题是当前函数sort不能与具有两个参数的比较函数一起使用,而是与key一个参数的单个函数一起使用。Python 提供了functools.cmp_to_key帮助你转换它,所以,做类似的事情

test.sort(key = functools.cmp_to_key(
    lambda x, y: cmp(x[2],y[2]) or cmp(x[4], y[4]) or cmp(y[9], x[9])
)) 
Run Code Online (Sandbox Code Playgroud)