Объединение строк из последовательных равных кортежей - PullRequest
2 голосов
/ 06 мая 2020

Учитывая список, который выглядит следующим образом:

[(1, 'a'), (1, 'b'), (2, 'c'), (1, 'd')]

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

[(1, 'ab'), (2, 'c'), (1, 'd')]

Должен присоединяться, только если оба находятся рядом друг с другом.

Если ключ равен None, как показано ниже, он должен быть объединен с предыдущим элементом.

[(1, 'a'), (1, 'b'), (None, 'e'), (2, 'c'), (1, 'd')]

результат должен быть

[(1, 'abe'), (2, 'c'), (1, 'd')]

1 Ответ

3 голосов
/ 06 мая 2020

Вы можете использовать itertools.groupby для группировки последовательных подсписок с одним и тем же первым значением и join строк из соответствующих gruoped кортежей:

from itertools import groupby
l = [(1, 'a'), (1, 'b'), (2, 'c'), (1, 'd')]

[(k,''.join([i for _,i in v])) for k,v in groupby(l, key=lambda x:x[0])]
# [(1, 'ab'), (2, 'c'), (1, 'd')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...