Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
33
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

意外と知られていない!? Python標準ライブラリの関数groupby

Python標準ライブラリのモジュール itertools はイテレータを扱う便利な関数が提供されています。
その中でも groupby はよく使う機会が多いのですが、以外と知らない人も多いようなので紹介します。

groupby

iterable(リストやイテレータなど)を任意のキーでグルーピングする関数です。
戻り値はキーとキーに属する要素のイテレータになります。

groupbyに渡すiterableは同じキーの要素が連続していなければならないので、事前にソートする必要があります。

基本的な使い方

説明だけだとイメージがつきにくいので簡単なサンプルを見てみましょう。

文字と数値のタプルを要素とするリストを、文字でグルーピングする例です。

from itertools import groupby
from operator import itemgetter

a = [("b", 3), ("a", 1), ("c", 2), ("a", 2), ("b", 1)]
a = sorted(a, key=itemgetter(0))

for (k, g) in groupby(a, key=itemgetter(0)):
    print("key:" + k)
    for item in g:
        print(item)
実行結果
key:a
('a', 1)
('a', 2)
key:b
('b', 3)
('b', 1)
key:c
('c', 2)

ソートしないでgroupbyを使うと次のようになってしまいます。

ソートしないで実行すると...
key:b
('b', 3)
key:a
('a', 1)
key:c
('c', 2)
key:a
('a', 2)
key:b
('b', 1)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
33
Help us understand the problem. What are the problem?