Skip to content Skip to sidebar Skip to footer

Python - Dividing A List-of-lists To Groups

Consider the following simplified case: lol = [['John','Polak',5,3,7,9], ['John','Polak',7,9,2,3], ['Mark','Eden' ,0,3,3,1], ['Mark','Eden' ,5,1,2,9]] What wo

Solution 1:

List:

from itertools import groupby
lolol = [list(grp) for (match, grp) in groupby(lol, lambda lst: lst[:2])]
# [[['John', 'Polak', 5, 3, 7, 9], ['John', 'Polak', 7, 9, 2, 3]],
#  [['Mark', 'Eden', 0, 3, 3, 1], ['Mark', 'Eden', 5, 1, 2, 9]]]

Dictionary:

dolol = dict((tuple(match), [x[2:] for x in grp]) for (match, grp) in 
             groupby(lol, lambda lst: lst[:2]))
# {('John', 'Polak'): [[5, 3, 7, 9], [7, 9, 2, 3]],
#  ('Mark', 'Eden'): [[0, 3, 3, 1], [5, 1, 2, 9]]}

Since itertools.groupby works on consecutive matches, it assumes sorted input (lol).

Solution 2:

To complement delnan's answer with a Python 2 equivalent:

from collections import defaultdict

dolol=defaultdict(list)
fordatain lol:
    dolol[data[0],data[1]].append(data[2:])

Post a Comment for "Python - Dividing A List-of-lists To Groups"