Объединение нескольких списков в один во вложенном списке - PullRequest
0 голосов
/ 26 мая 2018

Я хочу сгруппировать несколько списков в один: Вот мой список:

myList=[[20, 'Start', '2008-10-10', 'End', '2008-11-09', 'NG'] ,
        [21, 'Start', '2008-10-10', 'End', '2008-12-15', 'G'], 
        [22, 'Start', '2009-11-23', 'End', '2009-12-10', 'B']]

Для элементов с одинаковой датой начала я хочу заменить их только одним списком с датой начала имаксимальная дата окончания среди тех элементов с одинаковым началом и идентификатором максимальной даты окончания.Например, в приведенном выше примере идентификаторы 20 и 21 имеют одинаковую дату начала, поэтому я должен заменить их одним списком, подобным следующему:

[21, 'Start', '2008-10-10', 'End', '2008-12-15', 'G'] 

Таким образом, общий вывод для этого примера должен быть таким:

myList=[[21, 'Start', '2008-10-10', 'End', '2008-12-15', 'G'],
        [22, 'Start', '2009-11-23', 'End', '2009-12-10', 'B']]

Ответы [ 2 ]

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

Одним из способов может быть попытка использования defaultdict:

from collections import defaultdict

myDict = defaultdict(list)
for item in myList:
    # key as date or third item in list
    myDict[item[2]].append(item)

# filter from the result of defaultdict
final_lst = [sorted(v, key = lambda k:k[0], reverse=True)[0] for k, v in list(myDict.items())]
print(final_lst)

Результат:

[[21, 'Start', '2008-10-10', 'End', '2008-12-15', 'G'],
 [22, 'Start', '2009-11-23', 'End', '2009-12-10', 'B']]
0 голосов
/ 26 мая 2018

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

import itertools
import re
myList=[[20, 'Start', '2008-10-10', 'End', '2008-11-09', 'NG'] ,
    [21, 'Start', '2008-10-10', 'End', '2008-12-15', 'G'], 
    [22, 'Start', '2009-11-23', 'End', '2009-12-10', 'B']]

new_list = [[a, list(b)] for a, b in itertools.groupby(sorted(myList, key=lambda x:x[2]), key=lambda x:x[2])]
final_result = [max(b, key=lambda x:list(map(int, re.split('\W+', x[-2])))) for _, b in new_list]

Выход:

[[21, 'Start', '2008-10-10', 'End', '2008-12-15', 'G'], [22, 'Start', '2009-11-23', 'End', '2009-12-10', 'B']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...