目次

目次

Python標準ライブラリの関数groupby

アバター画像
海津 純平
アバター画像
海津 純平
最終更新日2018/01/29 投稿日2018/01/29

はじめに

先輩に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'}

まとめ

わざわざロジックを考えなくてもグルーピングすることができました。

アバター画像

海津 純平

目次