Функция itertools groupby
предназначена для выполнения подобных операций. Некоторые другие ответы здесь создать словарь, который является очень разумным, но если вы на самом деле не хотите dict
, то вы можете сделать это:
from itertools import groupby
from operator import itemgetter
A = ['T', 'D', 'Q', 'D', 'D']
sessionid = [1, 1, 1, 2, 2]
for k, g in groupby(zip(sessionid, A), itemgetter(0)):
print('{}: {}'.format(k, list(list(zip(*g))[1])))
OUTPUT
1: ['T', 'D', 'Q']
2: ['D', 'D']
operator.itemgetter(0)
возвращается вызываемый, который извлекает элемент по индексу 0 любого объекта, который вы его передаете; groupby
использует это как ключевую функцию для определения того, какие элементы могут быть сгруппированы вместе.
Обратите внимание, что это и аналогичные решения предполагают, что индексы sessionid
сортируются. Если это не так, вам нужно отсортировать список кортежей, возвращаемых zip(sessionid, A)
с той же ключевой функцией, прежде чем передавать их в groupby
.
отредактирован правильно работать на Python 2 и Python 3
вы узнали о 'itertools.groupby'? –