辞書(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)

ここでやっていることはそれほど複雑ではなく、
まず辞書にそのキーが存在するかを確認しています。
もし存在していなければ、最初の値として0を入れます。
そのあとで1を足していく、という流れです。
この「なければ初期化してから足す」という形は、
カウント処理ではほぼ毎回出てくる書き方になります。
先ほどのコードは少しだけ長いので、もう少しコンパクトに書いてみます。
for item in data:
count[item] = count.get(item,0) +1
print(count)

この書き方では、getを使っています。
キーが存在する場合はその値が返り、存在しない場合は第2引数の値が返ります。
ここでは0を指定しているので、「なければ0からスタートする」という動きになります。
そのため、最初に書いていた「存在チェック」は不要になります。
さらにこの流れをシンプルにしたい場合は、defaultdictというものを使います。
from collections import defaultdict
count = defaultdict(int)
for item in data:
count[item] += 1
print(count)

ここでは 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)

ここでも基本の流れは同じです。
キーが存在しない場合は空のリストを作り、
そこに値を追加していきます。
違いは、「数を増やす」のではなく「リストに追加している」点です。
こうすることで、同じグループに属するデータをまとめることができます。
この処理も、defaultdictを使うと短く書けます。
from collections import defaultdict

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

ここでは list を渡しています。
キーが存在しない場合は自動的に空のリストが作られるため、
事前の準備をする必要がなくなります。
見た目としてはかなりシンプルになりますが、
やっていることは先ほどと同じです。
値を足し合わせる
もう一つよくあるパターンとして、「値を足し合わせる」処理があります。
sales = [
('apple', 100),
('banana', 200),
('apple', 150),
('banana', 50),
]

これを商品ごとに合計してみます。
total = {}
for name, price in sales:
total[name] = total.get(name, 0) + price
print(total)

ここでも流れは変わりません。
キーがなければ0からスタートし、値を足していくだけです。
カウントのときは1を足していましたが、今回は価格を足しています。
このように、数を数えるのか、値を足すのかの違いはありますが、
基本的な構造は同じです。
辞書を使ったカウントや集計は、いくつかの決まった書き方があります。
最初は少しパターンのように感じるかもしれませんが、
実際に何度か書いてみると、自然と手が動くようになります。
特に、今回見てきたように、
- 出現回数を数える
- グループごとにまとめる
- 値を合計する
といった処理は、少し形を変えながら何度も登場します。
リストと辞書を組み合わせることで、
こうしたデータ処理が比較的シンプルに書けるようになるのが、Pythonの大きな特徴です。
慣れてくると、複雑な処理でもまず「辞書でまとめられないか」と考えるようになり、
コードの書き方もかなり変わってきます。