通过返回对象方法对对象列表进行排序

dae*_*eda 2 python sorting list python-2.7

我有一个对象列表,它有一个函数可以对几个成员变量进行一些计算并返回一个值.我想根据此返回值对列表进行排序.

我已经找到了如何按成员变量对对象列表进行排序,但我希望将它们保密(_variable_name).

有没有一种简单的方法来实现这个类似于对象成员直接排序列表的方法?

Mar*_*ers 6

只需使用函数或方法的key参数:sorted()list.sort()

sorted_list = sorted(list_of_objects, key=function_that_calculates)
Run Code Online (Sandbox Code Playgroud)

function_that_calculates被要求在每个条目list_of_objects,并将其结果通知排序.

如果您的意思是每个对象都有一个方法,您可以使用一个lambdaoperator.methodcaller()对象来调用每个元素上的方法:

sorted_list = sorted(list_of_objects, key=lambda obj: obj.method_name())
Run Code Online (Sandbox Code Playgroud)

要么

from operator import methodcaller

sorted_list = sorted(list_of_objects, key=methodcaller('method_name'))
Run Code Online (Sandbox Code Playgroud)

请注意,在Python中,没有私有属性; 您的排序功能仍然可以访问它.领先的下划线只是一个惯例.因此,可以使用另一个lambda或使用operator.attrgetter()对象来按特定属性进行排序:

sorted_list = sorted(list_of_objects, key=lambda obj: obj._variable_name)
Run Code Online (Sandbox Code Playgroud)

要么

from operator import attrgetter

sorted_list = sorted(list_of_objects, key=attrgetter('_variable_name'))
Run Code Online (Sandbox Code Playgroud)