自定义对象列表排序

时间:2018-12-21 11:12:04

标签: python python-3.x list sorting oop

我有

之类的对象列表
actors = [Person('Raj' ,'Hindi'),
          Person('John',  'English'),
          Person('Michael' 'Marathi'),
          Person('Terry','Hindi'),
          Person('Terry', 'Telugu')]

我想根据他们的母语对这些人进行排序。按顺序依次是马拉地语,英语,北印度语,泰卢固语。意味着我想按自定义逻辑而不是按升序或降序对对象进行排序。

我正在使用python 3.7。您能帮我怎么做吗?

2 个答案:

答案 0 :(得分:5)

你可以

sorted(actors, key = lambda x: mothertongue_list.index(x.tongue))

如果有的话,您可以通过Person得到tongue的母语,并且mothertongue_list是您想要排序的列表。

答案 1 :(得分:3)

首先创建语言的优先级映射:

priority_map = {v: k for k, v in enumerate(('Marathi', 'English', 'Hindi', 'Telugu'))}

然后将sorted与自定义键一起使用:

res = sorted(actors, key=lambda x: priority_map[x.tongue])

或者,如果适用,对类的属性进行排序,如this example