如何将正在排序的列表中的项目传递给用作排序关键函数的 lambda?

问题描述 投票:0回答:2

我有一个函数,可以评估它收到的第一个参数的一些参数(此处

item
):

def item_fitness(
    item,
    fitness_criterion1,
    fitness_criterion2
    ) -> int:
    ...
    return val

它实际上做了什么并不重要。重要的是,它需要

fitness_criterion1
fitness_criterion2
来检查
item
的参数并返回一些适应度分数。

我想使用该函数作为

sorted()
中的排序功能,如下所示:

def some_function(items, crit1, crit2):
    items = sorted(
        items,
        key=lambda item, crit1, crit2: item_fitness(
            item,
            crit1,
            crit2
        ),
        reverse=True
    )

    # Do something with the sorted items

    return something

其中

item
取自
items
(正在
item
sorted()
实例的实际列表)。

我该怎么做?该函数也被称为 else where ,其特定元素来自

items

python sorting lambda
2个回答
0
投票

赋予

key
的函数只能接受单个参数。

您可以使用

functool.partial
创建一个预先应用一些参数的新函数。

def some_function(items, crit1, crit2):
    items = sorted(
        items,
        key=partial(fitness_criterion1 = crit1, fitness_criterion2=crit2),
        reverse=True
    )

0
投票

试试这个:

def item_fitness(
        item,
        fitness_criterion1,
        fitness_criterion2
) -> int:
    # ...
    return "val"


def some_function(items, crit1, crit2):
    items = sorted(
        items,
        key=lambda item: item_fitness(
            item,
            crit1,
            crit2
        ),
        reverse=True
    )

    # Do something with the sorted items
    return "something"

print(some_function([1, 2, 3], "crit1", "crit2"))  # something
© www.soinside.com 2019 - 2024. All rights reserved.