我已经在Python2中编写了一个排序,我试图将其转换为Python3,该Python 3要求输入密钥,并说不再有cmp函数可用:
test.sort(lambda x, y: cmp(x[2],y[2]) or cmp(x[4], y[4]) or cmp(y[9], x[9]))
有什么建议吗?
最诚挚的问候,
答案 0 :(得分:2)
python 3官方文档explains in this section是将其从python 2转换为3的正确方法。
原始的cmp
函数只是做类似的事情
def cmp(x, y):
if x == y:
return 0
elif x > y:
return 1
else:
return -1
也就是说,它等效于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])
))