关于python:对象列表的自定义排序

Customized sort on list of objects

我有这样的物品清单

1
2
3
4
5
actors = [Person('Raj' ,'Hindi'),
          Person('John',  'English'),
          Person('Michael' 'Marathi'),
          Person('Terry','Hindi'),
          Person('Terry', 'Telugu')]

我想根据母语对这些人进行分类。依次是马拉地语、英语、印地语、泰卢固语。这意味着我希望按自定义逻辑而不是按升序或降序对对象排序。

我使用的是python 3.7。你能帮我一下吗?


你可以的

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

如果我们有,你可以从tongue那里得到Person的母语,mothertongue_list是你想要的列表。


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

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

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

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

或者,如果适用,对类的属性进行排序,如本例所示。