求助:报错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
相关产品推荐
相关产品推荐

