为了账号安全,请及时绑定邮箱和手机立即绑定

根据多个属性对列表进行排序?

根据多个属性对列表进行排序?

波斯汪 2019-07-03 14:00:01
根据多个属性对列表进行排序?我有一份清单:[[12, 'tall', 'blue', 1],[2, 'short', 'red', 9],[4, 'tall', 'blue', 13]]如果我想按一个元素进行排序,比如说,高个子/矮个子元素,我可以通过s = sorted(s, key = itemgetter(1)).如果我想双管齐下高/矮和颜色,我可以做两次,每一个元素一次,但有更快的方法吗?
查看完整描述

3 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

键可以是返回元组的函数:

s = sorted(s, key = lambda x: (x[1], x[2]))

或者你也可以实现同样的使用itemgetter(这样做速度更快,避免了Python函数调用):

import operator
s = sorted(s, key = operator.itemgetter(1, 2))

注意这里你可以用sort而不是使用sorted然后重新分配:

s.sort(key = operator.itemgetter(1, 2))


查看完整回答
反对 回复 2019-07-03
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

我不确定这是否是最重要的一种.我有一个元组列表,需要按降序整数值和第二个字母排序。这需要反转整数排序,而不是字母排序。这是我的解决方案:(在考试中,我甚至不知道你可以“嵌套”排序函数)

a = [('Al', 2),('Bill', 1),('Carol', 2), ('Abel', 3), ('Zeke', 2), ('Chris', 1)]  
b = sorted(sorted(a, key = lambda x : x[0]), key = lambda x : x[1], reverse = True) 
 print(b)  [('Abel', 3), ('Al', 2), ('Carol', 2), ('Zeke', 2), ('Bill', 1), ('Chris', 1)]


查看完整回答
反对 回复 2019-07-03
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

看来你可以用list而不是tuple..这一点变得更加重要,我认为当您获取属性而不是列表/元组的“神奇索引”时。

在我的例子中,我想按类的多个属性进行排序,其中传入的键是字符串。我需要在不同的地方进行不同的排序,并且我希望对客户机正在与之交互的父类进行公共的默认排序;只需要在真正“需要”时重写“排序键”,但也可以将它们存储为类可以共享的列表。

所以首先我定义了一个帮助方法

def attr_sort(self, attrs=['someAttributeString']:
  '''helper to sort by the attributes named by strings of attrs in order'''
  return lambda k: [ getattr(k, attr) for attr in attrs ]

那就用它

# would defined elsewhere but showing here for consisenessself.SortListA = ['attrA', 'attrB']
self.SortListB = ['attrC', 'attrA']records = .... 
#list of my objects to sortrecords.sort(key=self.attr_sort(attrs=self.SortListA))
# perhaps later nearby or in another functionmore_records = .... 
#another listmore_records.sort(key=self.attr_sort(attrs=self.SortListB))

这将使用生成的lambda函数对列表进行排序。object.attrA然后object.attrB假设object具有与提供的字符串名称相对应的getter。第二个案子object.attrC然后object.attrA.

这还允许您将外部排序选项公开给使用者,单元测试,或者让它们告诉您如何对API中的某些操作进行排序,只需给出一个列表,而不是将它们耦合到后端实现。


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 770 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信