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

如何将待排序列表的item传入sorted()的lambda key排序函数?

解决方案

你当前的代码存在参数不匹配的问题:你给lambda定义了item, crit1, crit2三个参数,但sorted()的key函数只会接收一个参数(也就是遍历items时的单个元素),运行时会直接报错。下面是两种可行的修正方案:

方案1:利用闭包捕获外部变量

这是最简洁的写法,让lambda只接收sorted()传递的item参数,crit1和crit2直接从外部函数的作用域中获取:

def some_function(items, crit1, crit2):
    items = sorted(
        items,
        key=lambda item: item_fitness(item, crit1, crit2),
        reverse=True
    )
    # 处理排序后的items逻辑
    return something

方案2:使用functools.partial(可选)

如果不习惯用lambda,可以用functools.partial把item_fitness的后两个参数预先固定,生成一个只需要传入item的新函数:

from functools import partial

def some_function(items, crit1, crit2):
    # 固定适配准则参数,得到仅需传入item的函数
    bound_fitness = partial(item_fitness, fitness_criterion1=crit1, fitness_criterion2=crit2)
    items = sorted(items, key=bound_fitness, reverse=True)
    # 处理排序后的items逻辑
    return something

关于item_fitness的单独调用

因为item_fitness本身的定义就是接收item和两个准则参数,所以在其他地方单独调用时,直接传入对应参数即可:

# 示例:计算单个item的适配分数
target_item = items[0]
fitness_score = item_fitness(target_item, custom_criterion1, custom_criterion2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:04:53