如何将对象属性作为函数参数传递给lambda函数?

joh*_*ck1 2 python python-3.x python-3.6

我创建了两个返回已排序列表的函数.它们都作为参数列出了包含Employee Class实例的列表.第一个按名称属性排序,第二个按年龄排序,两者都使用lambda函数

class Employee():

    allEmployees = []

    def __init__(self, name, age):
        self.name = name
        self.age = age
        Employee.allEmployees.append(self)


def sortEmployeesByName(some_list, name):
    return sorted(some_list, key=lambda employee: employee.name)

def sortEmployeesByAge(some_list, age):
    return sorted(some_list, key=lambda employee: employee.age)
Run Code Online (Sandbox Code Playgroud)

如何只创建一个函数sortEmployees,我将属性作为第二个参数传递,并使用lambda函数?

例如

def sortEmployess(some_list, attribute):
    return sorted(some_list, key=lambda employee: employee.attribute)
Run Code Online (Sandbox Code Playgroud)

nos*_*klo 5

你想要的operator.attrgetter,不需要lambdas.这也应该更好:

sorted(some_list, key=operator.attrgetter('name'))
Run Code Online (Sandbox Code Playgroud)

  • 作为修改,您还可以执行“from operator import attrgetter”,并在不使用模块的情况下将其引用为“sorted(some_list, key=attrgetter('name'))” (2认同)