迭代工具groupby https://docs.python.org/3/library/itertools.html#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) https://docs.python.org/3/library/operator.html#operator.itemgetter返回一个可调用对象,该对象可获取您传递给它的任何对象的索引 0 处的项目;groupby
将此作为关键函数来确定哪些项目可以分组在一起。
请注意,此解决方案和类似的解决方案假设sessionid
索引已排序。如果不是,那么您需要对返回的元组列表进行排序zip(sessionid, A)
在将它们传递给之前具有相同的关键功能groupby
.
edited在 Python 2 和 Python 3 上正常工作