如何从N个多对象列表中按最大属性值获取对象列表?

时间:2019-06-18 04:35:54

标签: python-3.x list itertools getattribute

我有一个多对象列表,如下所示(简化版本)

listA = [[obj1(val=1),obj2(val=1)],[obj2(val=4),obj3(val=2)]]
listB = [[obj4(val=1),obj5(val=1)],[obj6(val=5),obj7(val=3)]]
listC = [[obj8(val=1),obj9(val=1)],[obj10(val=6),obj11(val=4)]]

我想通过比较每个多列表的子列表,从上述多列表获取具有特定属性最大值的对象列表。如果所有比较对象的属性值都相同,则应该获得任何一个对象。

输出:

maxList = [obj1(value=1),obj10(val=6)]

类似的question可以从列表中获取具有最大属性值的对象,但是这种情况适用于多列表。我知道可以使用嵌套的for循环来实现,但是必须有更好的方法使用itertools和getattr来做到这一点?

1 个答案:

答案 0 :(得分:1)

为简化起见,让我们对正整数进行演示。将此方法适应您的对象。

给出

import itertools as it


a = [[1, 1], [3, 2]]
b = [[1, 1], [5, 3]]
c = [[1, 1], [6, 3]]

代码

list(map(max, [list(it.chain(*col)) for col in zip(a, b, c)]))
# [1, 6]

等价

[max([x for x in it.chain(*col)]) for col in zip(a, b, c)]
# [1, 6]