はじめに
先輩にPythonには標準でグルーピングできる関数groupbyがあることを教えていただきました。
かっこよかったので紹介します。
環境
- Python 3.6.3
使い方
以下のように使います。
groupby(iterableオブジェクト(リストなど), key=グルーピングしたいキー)
戻り値はキーの値と同じキーの要素グループのイテレータになります。 関数に渡すiterableオブジェクトは、グルーピングしたいキーでソート済みである必要があります。 説明がなかなか難しいので、以下に使い方例のサンプルコードを記載します。
使い方の例
from itertools import groupby
# チーム番号が割り振られたメンバーリスト
# {'team': チーム番号, 'name': 名前}
members = [{'team': 1, 'name': 'A'},
{'team': 3, 'name': 'B'},
{'team': 2, 'name': 'C'},
{'team': 1, 'name': 'D'},
{'team': 2, 'name': 'E'}]
# groupbyを使うには、まずはグルーピングしたいキーでソートする必要がある
members.sort(key=lambda m: m['team'])
# チーム番号でグルーピング
for key, group in groupby(members, key=lambda m: m['team']):
print("key:", key) # キーとして指定したチーム番号を出力
for member in group:
print(member) # 同じキー(チーム番号)のメンバーを出力
実行してみます。
$ python3 groupby.py
key: 1
{'team': 1, 'name': 'A'}
{'team': 1, 'name': 'D'}
key: 2
{'team': 2, 'name': 'C'}
{'team': 2, 'name': 'E'}
key: 3
{'team': 3, 'name': 'B'}
まとめ
わざわざロジックを考えなくてもグルーピングすることができました。
海津 純平