itertoolschain.groupby()の使い方

itertools.groupby(p, key)は,シーケンス p を key グループ化したイタレーターを出力します.key の値が変わった時に,次のグループになります.

プログラム例

import itertools

data = [('carp', 'tanaka', 2), ('carp', 'dobayashi', 7),\
        ('carp', 'maru', 9),\
        ('tigers', 'egoshi', 25), ('tigers', 'nishioka', 5),\
        ('tigers', 'itoi', 7),\
        ('bay', 'kamisato', 8), ('bay', 'ishikawa', 7),\
        ('bay', 'tsutsugo', 25)]

data = sorted(data, key=lambda x: x[2])

for k, x in itertools.groupby(data, key=lambda x: x[2]):
    print('New grourp:', k)
    mem = list(x)
    for person in mem:
        print('\t', person)

実行結果

New grourp: 2
     ('carp', 'tanaka', 2)
New grourp: 5
     ('tigers', 'nishioka', 5)
New grourp: 7
     ('carp', 'dobayashi', 7)
     ('tigers', 'itoi', 7)
     ('bay', 'ishikawa', 7)
New grourp: 8
     ('bay', 'kamisato', 8)
New grourp: 9
     ('carp', 'maru', 9)
New grourp: 25
     ('tigers', 'egoshi', 25)
     ('bay', 'tsutsugo', 25)