[lang-ref] ( list_group_by_key ) ( python )
def test_list_group_by_key():
# defaultdict
from collections import defaultdict
rows = [
('A', 11),
('B', 12),
('C', 13),
('B', 22),
('C', 23),
('B', 32),
]
groups = defaultdict(list) # [] is set at first access
for k, v in rows:
groups[k].append(v)
assert groups == { 'A': [11], 'B': [12, 22, 32], 'C': [13, 23] }
def test_list_group_by_key_alternative():
# groupby, but ..
# if keys are not sorted, not grouped
from itertools import groupby
from operator import itemgetter
# not sorted
rows = [
('A', 11),
('B', 12),
('C', 13),
('B', 22),
('C', 23),
('B', 32),
]
groups = {
k: [v for _, v in g]
for k, g in groupby(rows, key=itemgetter(0))
}
assert groups == { 'A': [11], 'B': [32], 'C': [23] } # last one wins..
# sorted
rows_sorted = sorted(rows, key=itemgetter(0))
groups = {
k: [v for _, v in g]
for k, g in groupby(rows_sorted, key=itemgetter(0))
}
assert groups == { 'A': [11], 'B': [12, 22, 32], 'C': [13, 23] }