Pythonの辞書(dict)応用:カウント処理と集計を解説

python logo notext.svg

辞書(dict)は、キーと値の組み合わせでデータを管理するデータ構造です。

基本的な操作を理解すると、リストと同じように扱えるようになりますが、
実際にはそれだけではなく、「データを数える」や「まとめる」といった処理にもよく使われます。

こうした処理は少しパターンが決まっていて、一度流れを理解すると、
いろいろな場面で応用できるようになります。

この記事では、具体的な例を見ながら、その流れを順番に確認していきます。

Pythonの導入についてはこちら。

Python入門:最初のプログラムを作って実行する方法 – Lean Data Office

Python環境構築のやり方|初心者向け完全ガイド – Lean Data Office

辞書についての入門記事はこちら。

Pythonのdict入門:キー・値・操作方法をわかりやすく整理 – Lean Data Office

出現回数を数える

まずは単純な例として、リストの中に同じ値が何回出てくるかを数えてみます。

data = ['a', 'b', 'a', 'c', 'b', 'a']

このリストを元にして、次のような辞書を作ります。

count = {}
for item in data:
    if item not in count:
        count[item] = 0
    count[item] += 1
print(count)
image

ここでやっていることはそれほど複雑ではなく、
まず辞書にそのキーが存在するかを確認しています。

もし存在していなければ、最初の値として0を入れます。
そのあとで1を足していく、という流れです。

この「なければ初期化してから足す」という形は、
カウント処理ではほぼ毎回出てくる書き方になります。

先ほどのコードは少しだけ長いので、もう少しコンパクトに書いてみます。

for item in data:
    count[item] = count.get(item,0) +1
print(count)
image

この書き方では、getを使っています。

キーが存在する場合はその値が返り、存在しない場合は第2引数の値が返ります。
ここでは0を指定しているので、「なければ0からスタートする」という動きになります。

そのため、最初に書いていた「存在チェック」は不要になります。

さらにこの流れをシンプルにしたい場合は、defaultdictというものを使います。

from collections import defaultdict
count = defaultdict(int)
for item in data:
    count[item] += 1
print(count)
image

ここでは int を渡していますが、これは「初期値を作るための関数」として使われています。
キーが存在しないときは int() が呼ばれ、0が返ります。

そのため、特別な処理を書かなくても、そのまま加算するだけでカウントができます。

動きを見ると、最初のコードとほぼ同じことをしていますが、
書き方がかなりシンプルになっているのが分かります。

グループごとにまとめる

次は少し違うパターンとして、値をグループごとにまとめる処理を見てみます。

data = ['ant', 'bear', 'cat', 'apple', 'dog', 'car']

このリストを、先頭の文字ごとに分類していきます。

group = {}
for item in data:
    key = item[0]
    if key not in group:
        group[key] = []
    group[key].append(item)
print(group)
image

ここでも基本の流れは同じです。

キーが存在しない場合は空のリストを作り、
そこに値を追加していきます。

違いは、「数を増やす」のではなく「リストに追加している」点です。

こうすることで、同じグループに属するデータをまとめることができます。

この処理も、defaultdictを使うと短く書けます。

from collections import defaultdict
image
group = defaultdict(list)
for item in data:
    group[item[0]].append(item)
print(group)
image

ここでは list を渡しています。

キーが存在しない場合は自動的に空のリストが作られるため、
事前の準備をする必要がなくなります。

見た目としてはかなりシンプルになりますが、
やっていることは先ほどと同じです。

値を足し合わせる

もう一つよくあるパターンとして、「値を足し合わせる」処理があります。

sales = [
('apple', 100),
('banana', 200),
('apple', 150),
('banana', 50),
]
image

これを商品ごとに合計してみます。

total = {}
for name, price in sales:
    total[name] = total.get(name, 0) + price
print(total)
image

ここでも流れは変わりません。

キーがなければ0からスタートし、値を足していくだけです。
カウントのときは1を足していましたが、今回は価格を足しています。

このように、数を数えるのか、値を足すのかの違いはありますが、
基本的な構造は同じです。

辞書を使ったカウントや集計は、いくつかの決まった書き方があります。

最初は少しパターンのように感じるかもしれませんが、
実際に何度か書いてみると、自然と手が動くようになります。

特に、今回見てきたように、

  • 出現回数を数える
  • グループごとにまとめる
  • 値を合計する

といった処理は、少し形を変えながら何度も登場します。

リストと辞書を組み合わせることで、
こうしたデータ処理が比較的シンプルに書けるようになるのが、Pythonの大きな特徴です。

慣れてくると、複雑な処理でもまず「辞書でまとめられないか」と考えるようになり、
コードの書き方もかなり変わってきます。

筋トレとオートメーションが趣味。 モバイルアプリ個人開発者。 データ処理・可視化とレポートにハマり備忘録と情報共有のためにブログ開設し運営している。