jfeldman
@jfeldman
самоучка

Как от списка пар отсортированного перейти к списку пар с уникальным первым элементом?

Дано: есть список пар отсортированный (sorted), первый элемент - старший ключ, второй элемент - младший ключ.

Надо получить список пар с уникальным первым элементом, так чтобы все вторые элементы склеились в строку - через запятую - с сохранением сортировок.

Можно организовать просмотр и сжатие в цикле, можно - как рекурсивный вызов функции.
Но нет ли тут готовых инструментов?
  • Вопрос задан
  • 79 просмотров
Решения вопроса 2
@assembled
Почти как у longclaps, только в виде трудночитаемого спискового включения:
from itertools import groupby
from operator import itemgetter

lst = ((0, 1), (0, 2), (1, 0), (2, 0), (2, 1), (2, 2))

result = [(i[0], ', '.join(str(j[1]) for j in i[1]))  for i in groupby(lst, itemgetter(0))]
Ответ написан
jfeldman
@jfeldman Автор вопроса
самоучка
самое лучшее решение здесь
https://docs.python.org/2/library/collections.html

>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> for k, v in s:
...     d[k].append(v)
...
>>> d.items()
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
longclaps
@longclaps
Всё уже придумано до нас, даже губозакатная машинка изобретена.
А вот на ваш случай готового инструмента нет (
Придётся городить велосипед:
from itertools import groupby
from operator import itemgetter

l = [(1, 1), (1, 2), (2, 1), (2, 3), (2, 5), (2, 7)]
for p, q in groupby(l, itemgetter(0)):
    print(p, list(map(itemgetter(1), q)))

Запятые сами добавьте, по вкусу.
Ответ написан
Комментировать
s41blizzard
@s41blizzard
Если не ошибаюсь, то вот этот вопрос похож на ваш
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы