プログラミング

[Python]リストをグループ化する

プログラミング
この記事は約2分で読めます。
スポンサーリンク

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文でループしてグルーピング対象のキー値を判別して、配列に詰め直して、っていうのを自分で実装ないといけなくなるので、それに比べるとかなり簡単にグループ化の実装ができると思います。

スポンサーリンク
スポンサーリンク
KoEをフォローする
CodeLab

コメント

タイトルとURLをコピーしました