Python
GroupBy

[python] Group data by key (groupby)

More than 1 year has passed since last update.

groupby() の操作は Unixuniq フィルターと似ています。
key 関数の値が変わるたびに休止または 新しいグループを生成します (このために通常 同じ key 関数でソートしておく必要があるのです)。
この動作は SQL の入力順に関係なく共通の要素を集約する GROUP BY とは違います

# -*- coding:utf-8 -*-
from itertools import groupby
from operator import itemgetter

data = [("a", 1), ("b", 1), ("a", 2), ("b", 2), ("c", 1)]
print("data: %s" % data)

# データをソートしておく
data_sorted = sorted(data, key=itemgetter(0))
print("sorted data: %s" % data_sorted)

groups = []
groups_key_merged = []
for unique_key, group in groupby(data_sorted, key=itemgetter(0)):
    groups.append(list(group))   # Store group iterator as a list

print("grouped data: %s" % groups)
data: [('a', 1), ('b', 1), ('a', 2), ('b', 2), ('c', 1)]
sorted data: [('a', 1), ('a', 2), ('b', 1), ('b', 2), ('c', 1)]
grouped data: [[('a', 1), ('a', 2)], [('b', 1), ('b', 2)], [('c', 1)]]

参考

https://docs.python.jp/3/library/itertools.html#itertools.groupby
https://qiita.com/tag1216/items/9aecc6816371ee35215e