Skip to content
Advertisement

Grouping a list of tuple which has two lists based on the second list

I have a sequence is like this,

seq = [[["A","AA","AB"],[0,1,2,3]], [["B","BB","BC"],[1,2,3]], [["C","CA","CB"],[0,1,2,3]]]

I wanted to convert this to something like below

[[['A', 'AA', 'AB', 'C', 'CA', 'CB'], [0, 1, 2, 3]], [['B', 'BB', 'BC'], [1, 2, 3]]]

I tried but I am getting like below. Can someone help in achieving the correct results.

In [105]: from itertools import groupby  
     ...: from operator import itemgetter  
     ...: seq = [[["A","AA","AB"],[0,1,2,3]], [["B","BB","BC"],[1,2,3]], [["C","CA","CB"],[0,1,2,3]]]  
     ...: seq.sort(key = itemgetter(1))  
     ...: groups = groupby(seq, itemgetter(1))  
     ...: [[(item[0],key) for item in data] for (key, data) in groups]                                                                                                                                                                
Out[105]: 
[[(['A', 'AA', 'AB'], [0, 1, 2, 3]), (['C', 'CA', 'CB'], [0, 1, 2, 3])],
 [(['B', 'BB', 'BC'], [1, 2, 3])]]

Advertisement

Answer

In [105]: from itertools import groupby  
     ...: from operator import itemgetter  
     ...: seq = [[["A","AA","AB"],[0,1,2,3]], [["B","BB","BC"],[1,2,3]], [["C","CA","CB"],[0,1,2,3]]]  
     ...: seq.sort(key = itemgetter(1))  
     ...: groups = groupby(seq, itemgetter(1))  
     ...: l = [[(item[0],key) for item in data] for (key, data) in groups] 
     ...: for i in l: 
     ...:     flat_list = [item for sublist in i[0] for item in sublist] 
     ...:     i[0] = flat_list  
User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement