Python Version 3 Logo

[Python]リストをグループ化する実装方法

Python の標準ライブラリの関数「 groupby 」を利用したリストのグループ化の方法を説明していきます。

前提条件

今回サンプルを実行した環境は下記の通りです。

  • Python : 3.6.1

グループ化の構文

グループ化の構文は下記の通りです。

from itertools import groupby

groupby(list, key=lambda x: x['key'])

list 」はリストや配列など、x['key']の「 key 」を適宜読み替えて利用します。

では実際に使ってみます。

グループ化の実装方法

from itertools import groupby

# 名前と成績のランクの一覧
# {'name': 名前, 'rank': 成績}
members = [{'name': '佐藤', 'rank': 'A'},
           {'name': '鈴木', 'rank': 'B'},
           {'name': '田中', 'rank': 'A'},
           {'name': '山田', 'rank': 'C'},
           {'name': '山本', 'rank': 'B'}]

# groupbyを使うには、まずはグルーピングしたいキーでソートする
members.sort(key=lambda x: x['rank'])

# 成績でグルーピング
for key, ranking in groupby(members, key=lambda x: x['rank']):
    print("key:", key)
    for rank in ranking:
        print(rank)

動作確認

先ほどのソースの動作確認すると、

$ python sample.py
key: A
{'name': '佐藤', 'rank': 'A'}
{'name': '田中', 'rank': 'A'}
key: B
{'name': '鈴木', 'rank': 'B'}
{'name': '山本', 'rank': 'B'}
key: C
{'name': '山田', 'rank': 'C'}

という感じでグループ化されます。

最後に

標準ライブラリを利用することでグループ化のロジックを実装せずに、グループ化を実現することができました。もし、「 groupby 」を使用しない場合、リストを for 文でループしてグルーピング対象のキー値を判別して、配列に詰め直して、っていうのを自分で実装ないといけなくなるので、それに比べるとかなり簡単にグループ化の実装ができると思います。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です