[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] }