You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:报错TypeError: must use keyword argument for key function如何解决

解决TypeError: must use keyword argument for key function

这个错误我太熟了!本质是你在调用排序函数(比如list.sort()或者全局的sorted())时,没按Python 3的规则传递排序用的key函数——必须以key=xxx的关键字参数形式传入,不能直接把函数作为位置参数丢进去。

错误写法 vs 正确写法

先看你可能踩坑的错误示例:

# ❌ 错误:直接把key函数当成位置参数传递
sorted(p, my_custom_key)
p.sort(my_custom_key)

改成正确的关键字参数形式就搞定:

# ✅ 正确:用key=指定排序函数
sorted(p, key=my_custom_key)
p.sort(key=my_custom_key)

如果需要自定义比较逻辑(原Python2的cmp场景)

要是你的排序需求不是简单的按某个字段/规则映射,而是需要自定义两个元素的比较逻辑(比如Python2里用cmp参数的情况),可以用functools.cmp_to_key()把比较函数转换成key函数:

from functools import cmp_to_key

# 自定义比较函数:返回负数/0/正数分别表示a < b / a == b / a > b
def my_compare(a, b):
    if a.value < b.value:
        return -1
    elif a.value == b.value:
        return 0
    else:
        return 1

# 转换后传入key参数
sorted(p, key=cmp_to_key(my_compare))
p.sort(key=cmp_to_key(my_compare))

针对类中列表p的排序示例

其实类里的列表p和普通列表排序逻辑完全一致,比如在类的方法里排序:

class MyClass:
    def __init__(self):
        self.p = [("apple", 2), ("banana", 1), ("cherry", 3)]
    
    def sort_p_by_quantity(self):
        # 按元组的第二个元素(数量)排序
        self.p.sort(key=lambda item: item[1])
        # 或者用自定义函数
        def sort_key(item):
            return item[1]  # 取数量作为排序依据
        self.p.sort(key=sort_key)

内容的提问来源于stack exchange,提问作者Job Hunter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:07:06