Нахождение максимального значения в списке списка - PullRequest
0 голосов
/ 19 июня 2019

Я ищу элегантный способ взять список списков и найти максимальное значение для подмножества элементов. Это лучше объяснить на небольшом примере. Учитывая следующие данные:

data = [['1','AAA','somestuff','1/5/2018'],
        ['1','AAA','differentstuff','1/5/2018'],
        ['1','AAA','evendifferent','1/10/2018'],
        ['2','BBB','foo','1/12/2018'],
        ['2','BBB','bar','1/20/2018']]

Я хотел бы вернуть следующий список списков:

[['1','AAA','evendifferent','1/10/2018'], 
    ['2','BBB','bar','1/20/2018']]

Вывод сгруппирован по индексу 1 внутренних списков, а максимальное значение основано на дате (последний элемент во внутреннем списке).

1 Ответ

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

Вам нужно получить datetime из вашей строковой даты - иначе '1/5/2018' сравнивает «больше», чем '1/10/2018', потому что '5' > '1' для строк.

Вы можете добиться этого следующим образом:

data = [['1','AAA','somestuff','1/5/2018'],
        ['1','AAA','differentstuff','1/5/2018'] ,
        ['1','AAA','evendifferent','1/10/2018'] ,
        ['2','BBB','foo','1/12/2018'] ,
        ['2','BBB','bar','1/20/2018']]


# group by AAA, BBB etc. into lists 
from collections import defaultdict

dd = defaultdict(list)
for d in data:
    dd[d[1]].append(d)

import datetime

# iterate over groups and get the maximum value of each list
for k in dd:
    # for the datetime converted da
    print(max ( dd[k], key = lambda x: datetime.datetime.strptime(x[-1],"%d/%M/%Y")))

Документация:

...