объединить элементы из списка кортежей, если первый массив совпадает - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть список кортежей:

seqList=[('SQ010', ('sh001', '1-10')), ('SQ010', ('sh002', '5-15')), ('SQ010', ('sh003', '6-16')), ('SQ010', ('sh004', '7-17')), ('SQ020', ('sh001', '8-18')), ('SQ020', ('sh002', '9-19')), ('SQ020', ('sh003', '10-20'))]

Я хочу объединить каждый элемент с одним и тем же первым массивом, чтобы получить такой вывод:

[('SQ010', ('sh001', '1-10'), ('sh002', '5-15'), ('sh003', '6-16'), ('sh004', '7-17')), ('SQ020', ('sh001', '8-18'), ('sh002', '9-19'),('sh003', '10-20'))]

Я пробовал с groupby с следующий код:

from itertools import groupby
output_list = [tuple(i[1] for i in e) for _, e in groupby(seqList, lambda x: x[0])]
print output_list

это результат:

[(('sh001', '1-10'), ('sh002', '5-15'), ('sh003', '6-16'), ('sh004', '7-17')), (('sh001', '8-18'), ('sh002', '9-19'), ('sh003', '10-20'))]

Я не понимаю, почему я потерял часть SQXXX и как получить желаемый результат. спасибо

1 Ответ

2 голосов
/ 30 апреля 2020

Часть SQXXX - это переменная _, от которой вы избавились. Попробуйте:

output_list = [(i,) + tuple(i[1] for i in e) for i, e in groupby(seqList, lambda x: x[0])]

Предоставление:

[('SQ010', ('sh001', '1-10'), ('sh002', '5-15'), ('sh003', '6-16'), ('sh004', '7-17')), ('SQ020', ('sh001', '8-18'), ('sh002', '9-19'), ('sh003', '10-20'))]
...