Python 将两个列表分组

yin*_*liu 5 python list python-2.7 python-3.x

我有两个清单:

             A = ['T', 'D', 'Q', 'D', 'D']
             sessionid = [1, 1, 1, 2, 2]
Run Code Online (Sandbox Code Playgroud)

无论如何,我是否可以将 A 中的项目分组为相同的 sessionid,以便我可以打印出以下内容:

              1: ["T", "D","Q"]
              2: ["D","D"]
Run Code Online (Sandbox Code Playgroud)

PM *_*ing 4

itertoolsgroupby函数就是为了做这种事情而设计的。这里的其他一些答案创建了一本字典,这是非常明智的,但如果您实际上并不想要字典,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])))
Run Code Online (Sandbox Code Playgroud)

输出

1: ['T', 'D', 'Q']
2: ['D', 'D']
Run Code Online (Sandbox Code Playgroud)

operator.itemgetter(0)返回一个可调用对象,该对象可获取您传递给它的任何对象的索引 0 处的项目;groupby将此作为关键函数来确定哪些项目可以分组在一起。

请注意,此解决方案和类似的解决方案假设sessionid索引已排序。如果不是,那么您需要在zip(sessionid, A)将它们传递给 之前使用相同的 key 函数对返回的元组列表进行排序groupby


已编辑以在 Python 2 和 Python 3 上正常工作