Как сгруппировать по двум полям и упорядочить по дате и времени? - PullRequest
0 голосов
/ 04 мая 2018

Я составлен из подсписков с тремя элементами в каждом.

 ['1', '10', '2017-05-05']
 ['1', '10', '2017-07-20']
 ['2', '15', '2017-12-12']
 ['2', '15', '2018-01-24']
 ['1', '11', '2017-05-15']
 ['1', '11', '2017-07-21']
 ['2', '16', '2018-01-24']
 ['2', '16', '2018-01-28']

Я бы хотел сгруппировать первые 2 элемента, а затем вернуть список с более высокой датой (то есть ближе к сегодняшнему дню). поэтому я хотел бы, чтобы результат был:

 ['1', '10', '2017-07-20']
 ['2', '15', '2018-01-24']
 ['1', '11', '2017-07-21']
 ['2', '16', '2018-01-28']

Первые 2 строки сгруппированы вместе, а затем выигрывает 2017-07-20, потому что он больше, чем 2017-05-05.

1 Ответ

0 голосов
/ 04 мая 2018

Вы можете использовать метод groupby из библиотеки itertools.

from itertools import groupby
for key, rows in groupby(l, lambda x: (x[0], x[1])):
    dates = sorted([item[2] for item in list(rows)])
    print(list(key) + [dates[-1]])

выход

['1', '10', '2017-07-20']
['2', '15', '2018-01-24']
['1', '11', '2017-07-21']
['2', '16', '2018-01-28']

Вы также можете использовать list comprehension.

list = [list(key) + [sorted([item[2] for item in list(rows)])[-1]] for key, rows in groupby(l, lambda x: (x[0], x[1]))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...