Как получить список объектов по максимальному значению атрибута из N нескольких списков объектов? - PullRequest
1 голос
/ 18 июня 2019

У меня есть мульти-список объектов следующим образом (упрощенная версия)

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)]]

Я хочу получить список объектов из указанного выше мульти-списка, который имеет максимальное значениеопределенный атрибут путем сравнения подсписков каждого мультисписка.Если значение атрибута одинаково для всех сравниваемых объектов, он должен получить любой один объект.

output:

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

Существует аналогичный вопрос получить объект с максимальным значением атрибута из списка, но этот случай для нескольких списков.Я знаю, что это может быть достигнуто с помощью вложенных циклов for, но должен быть лучший способ сделать это с помощью itertools и getattr?

1 Ответ

1 голос
/ 18 июня 2019

Чтобы упростить, давайте продемонстрируем на обычных целых. Адаптируйте этот подход к вашему объекту.

С учетом

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]
...