Список кортежей Python объединяет 2-й элемент с уникальным первым элементом

Учитывая список кортежей, например:

a = [ ( "x", 1, ), ( "x", 2, ), ( "y", 1, ), ( "y", 3, ), ( "y", 4, ) ] 

Каким будет самый простой способ фильтрации уникального первого элемента и слияния второго элемента. Такой результат был бы желателен.

  • поиск и замена элементов в списке (python)
  • Учет списка, заменяющий элементы, которые не являются float или int
  • Удалить лишнее пространство из значений в списке
  • Как работает str (список)?
  • Как создать список случайных целых векторов, сумма которых равна x
  • Сложность list.index (x) в Python
  •  b = [ ( "x", 1, 2 ), ( "y", 1, 3, 4 ) ] 

    Благодаря,

  • Найти (и сохранить) дубликаты подписок в python
  • Почему random.shuffle возвращает None?
  • Список, возвращаемый функцией map, исчезает после одного использования
  • Как проверить, соответствуют ли все элементы списка условию?
  • Как определить, содержит ли 2-мерный список значение?
  • Как преобразовать список в строку
  • 4 Solutions collect form web for “Список кортежей Python объединяет 2-й элемент с уникальным первым элементом”

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

     >>> from collections import defaultdict >>> d = defaultdict(tuple) >>> a = [('x', 1), ('x', 2), ('y', 1), ('y', 3), ('y', 4)] >>> for tup in a: ... d[tup[0]] += (tup[1],) ... >>> [tuple(x for y in i for x in y) for i in d.items()] [('y', 1, 3, 4), ('x', 1, 2)] 
     >>> a = [("x", 1,), ("x", 2,), ("y", 1,), ("y", 3,), ("y", 4,)] >>> d = {} >>> for k, v in a: ... d.setdefault(k, [k]).append(v) >>> b = map(tuple, d.values()) >>> b [('y', 1, 3, 4), ('x', 1, 2)] 

    Вот что я придумал:

     [tuple(list(el) + [q[1] for q in a if q[0]==el]) for el in set([q[0] for q in a])] 

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

     >>> a = [ ( "x", 1, ), ( "x", 2, ), ( "y", 1, ), ( "y", 3, ), ( "y", 4, ) ] >>> from itertools import groupby >>> [(key,) + tuple(elem for _, elem in group) for key, group in groupby(a, lambda pair: pair[0])] [('x', 1, 2), ('y', 1, 3, 4)] 
    Python - лучший язык программирования в мире.