【问题标题】:Customized sort on list of objects对象列表的自定义排序
【发布时间】:2019-05-21 20:49:07
【问题描述】:

我有像

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

我想根据他们的母语对该列表进行排序。依次为马拉地语、英语、印地语、泰卢固语。意味着我想以自定义逻辑而不是升序或降序对对象进行排序。

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

【问题讨论】:

  • 什么是 Person 类?我们如何从实例访问language

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


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

你可以的

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

如果我们有,您可以通过tongue 获得Person 的母语,而mothertongue_list 是您想要的列表。

【讨论】:

  • 创建一个字典 {tongue: index} 并在该字典中查找索引而不是使用 index 可能更好。否则很好。
  • @tobias_k 为什么是dict 而不是list.index?有什么特别的原因吗?
  • @Mortz, list.index 的复杂度为 O(n),dict.getdict.__getitem__ 的时间复杂度为 O(1)。
  • 哇,太棒了。谢谢。这是否与字典是哈希表这一事实有关?
  • @Mortz,是的,完全正确。散列启用 O(1) 查找。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 2017-07-06
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多