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)