Python 3.x中的错误排序:TypeError:键功能必须使用关键字参数

时间:2018-11-18 09:55:29

标签: python

在python 2.x中,我传递函数时SORT运作良好。 切换到python 3.x ..排序已更改,但是我不明白如何修改代码以使其在python 3中也能工作。 如果我不传递函数,那么一切都会正常,但是当我传递函数时,会出现错误:TypeError:必须将关键字参数用作键函数

我应该如何更改...。

A = [8, 89]
A = [str(c) for c in A]
def my_cmp(a,b):
    return cmp(int(b+a), int(a+b))
A.sort(my_cmp)
print(A)

1 个答案:

答案 0 :(得分:3)

  1. cmp在Python 3中不再是有效的内置函数,但是您可以对其进行仿真。

  2. sort在Python 3中的工作方式有所不同,但是您可以使用cmp_to_key来转换旧的Python 2样式排序。您必须导入functools才能使用cmp_to_key

  

functools.cmp_to_key()实用程序可用于将2.x样式cmp函数转换为键函数。

  1. 您必须在Python 3排序方法中使用key关键字参数

这是一个示例实现:

from functools import cmp_to_key   # required for cmp_to_key

def cmp(v1, v2):                   # emulate cmp from Python 2
    if (v1 < v2):
        return -1
    elif (v1 == v2):
        return 0
    elif (v1 > v2):
        return 1

A = [8, 89]
A = [str(c) for c in A]

def my_cmp(a, b):
    return cmp(int(b + a), int(a + b))

A.sort(key = cmp_to_key(my_cmp))   # use cmp_to_key to emulate Python 2 behavior
print(A)  

输出与Python 2输出完全相同:

['89', '8']