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

时间:2014-11-29 13:41:35

标签: python list python-2.7 sorting

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

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

是否有一种简单的方法可以实现此目的,类似于对象成员直接对列表进行排序的方法?

1 个答案:

答案 0 :(得分:5)

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

sorted_list = sorted(list_of_objects, key=function_that_calculates)

function_that_calculates中的每个条目调用list_of_objects,其结果通知排序。

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

sorted_list = sorted(list_of_objects, key=lambda obj: obj.method_name())

from operator import methodcaller

sorted_list = sorted(list_of_objects, key=methodcaller('method_name'))

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

sorted_list = sorted(list_of_objects, key=lambda obj: obj._variable_name)

from operator import attrgetter

sorted_list = sorted(list_of_objects, key=attrgetter('_variable_name'))