May-05-2019, 09:43 AM
(This post was last modified: May-05-2019, 09:43 AM by Gribouillis.)
I suggest two versions
from collections import defaultdict def group_by_fields2(data, fields): groups = defaultdict(list) for item in data: key = tuple(item[f] for f in fields) groups[key].append(item) return groupsand this one, which may not preserve the initial ordering of the dictionaries
from itertools import groupby def group_by_fields3(data, fields): def key(item): return tuple(item[f] for f in fields) return {k: list(g) for k, g in groupby(sorted(data, key=key),key=key)}The first version can be refactored a little by providing a more general function
from collections import defaultdict def group_by(data, key): groups = defaultdict(list): for item in data: groups[key(item)].append(item) return dict(groups) def group_by_fields4(data, fields): return group_by(data, lambda item: tuple(item[f] for f in fields))