Contents
はじめに
これまでに学んだ リスト は、「順番に並んだデータの箱」でした。
しかし実際のプログラムでは、次のようなことをしたくなります。
- 「この名前の人の年齢は?」
- 「この設定項目の値は?」
- 「同じデータが何回出てきた?」
- 「前回と今回で何が変わった?」
このような処理は、リストだけでは非常にやりにくいです。
そこで登場するのが、
- 辞書(dict)
- 集合(set)
です。
辞書(dict)とは
辞書(dict)は、「名前」と「中身」をセットで管理するデータ型です。
現実世界で考えると、辞書はこんなものです。
- 電話帳
- 名前 → 電話番号
- 設定ファイル
- 設定名 → 設定値
超重要な考え方
辞書はこういう構造をしています。
キー(名前札) → 値(中身)
「この名前札の中身をくれ」と言うと、
一瞬で中身が返ってくるのが辞書の強みです。
辞書の作成
まずは辞書を作ってみましょう。
person = {
"name": "太郎",
"age": 30,
"job": "エンジニア"
}この1行で、次のことが起きています。
personという名前の辞書を作った"name"というキーに"太郎"を結びつけた"age"というキーに30を結びつけた
つまり、頭の中ではこうなっています。
"name" → "太郎"
"age" → 30
"job" → "エンジニア"空の辞書を作る理由
data = {}これは「あとから中身を入れる予定の箱」を作っています。
ログの集計やカウント処理では、この形から始めることが非常に多いです。
辞書の参照(中身の取り出し)
辞書の一番基本的な使い方は、
キーを指定して値を取り出すことです。
print(person["name"])このコードの意味は、
「person という辞書の中から、
"name"という名前札が付いた中身を取ってこい」
です。
実行結果:
太郎なぜ速いのか(イメージ)
リストの場合は、
「最初から順番に探す」必要があります。
辞書は、
「名前札の場所が最初から分かっている」ため、
探すという概念がほぼありません。
よくあるミス:存在しないキー
print(person["address"])このコードは 即エラーで止まります。
理由は単純で、
「address という名前札が存在しないのに、
それを取ろうとした」
からです。
安全に取り出す方法(超重要)
print(person.get("address", "未登録"))これは、
- キーがあれば → その値
- キーがなければ →
"未登録"
という意味です。
実務では [] より get() の方が安全です。
辞書への追加と更新
辞書は、あとから自由に書き換えられるのが特徴です。
追加
person["address"] = "東京"これは、
「address という名前札を新しく作って、
中身に 東京 を入れる」
という意味です。
更新
person["age"] = 31こちらは、
「age という名前札はすでにあるので、
中身を 31 に入れ替える」
という動きになります。
同じ書き方で「追加」と「更新」が両方できる
ここは必ず覚えてください。
辞書からの削除
辞書の中身を消す方法はいくつかあります。
指定したキーを消す
del person["job"]これは「job の札ごと捨てる」操作です。
消しながら値を使う
age = person.pop("age")これは、
- age を取り出す
- 辞書から age を消す
を同時に行います。
辞書を使った「超重要パターン:カウント」
ここからが 辞書の本番 です。
やりたいこと
["a", "b", "a", "c", "b", "a"]
↓
{"a": 3, "b": 2, "c": 1}
つまり、
「同じものが何回出てきたか数えたい」
実装(getを使う定番形)
items = ["a", "b", "a", "c", "b", "a"]
counts = {}
for x in items:
counts[x] = counts.get(x, 0) + 1
print(counts)
頭の中で起きていること
1回目 "a"
- counts に
"a"は無い get("a", 0)→ 0- 0 + 1 → 1
2回目 "b"
- 同じことが起きる
3回目 "a"
- 今度は
"a"がある get("a", 0)→ 1- 1 + 1 → 2
これを全部に対して繰り返しています。
集合(set)とは
集合は 「同じものを1個しか入れられない箱」 です。
numbers = {1, 2, 3, 3, 4}
print(numbers)結果:
{1, 2, 3, 4}
Pythonが勝手に重複を消してくれています。
なぜ集合が便利なのか
次のような処理を考えてください。
- 重複しているデータを消したい
- 2つのデータの違いを知りたい
リストでやると非常に面倒ですが、
集合なら 一行で終わります。
集合の作成で必ずハマる罠
empty = {}これは 集合ではありません。
空の辞書です。
空の集合は必ずこう書きます。
empty = set()集合を使った重複削除
items = ["a", "b", "a", "c", "b"]
unique = list(set(items))
print(unique)これは、
- set に変換 → 重複が消える
- list に戻す
という処理です。
※順番は保証されません。
集合演算(比較が一瞬で終わる)
a = {"apple", "banana", "orange"}
b = {"banana", "grape"}共通しているもの
print(a & b)→ 両方にあるものだけ
a にあって b にないもの
print(a - b)→ 差分
どちらかにあるもの全部
print(a | b)例:ファイルの差分チェック
before = {"a.txt", "b.txt", "c.txt"}
after = {"b.txt", "c.txt", "d.txt"}
print("追加:", after - before)
print("削除:", before - after)
print("共通:", before & after)この考え方は、
設定差分・ユーザー差分・権限チェックなどでも使われます。
辞書と集合を組み合わせると強い
重複しているものだけ知りたい
items = ["a", "b", "a", "c", "b"]
counts = {}
for x in items:
counts[x] = counts.get(x, 0) + 1
duplicates = {k for k, v in counts.items() if v >= 2}
print(duplicates)- 辞書で数える
- 集合で「条件に合うものだけ集める」
まとめ
今回は、Pythonでデータを整理して扱うために欠かせない
辞書(dict)と集合(set)の基本 を学びました。
- 辞書は「キーと値」をペアで管理できるデータ型
- 設定情報の管理や出現回数の集計によく使われる
get()を使ったカウント処理は実務でも頻出- 集合は重複を自動で排除できるデータ型
- 差分抽出やデータ比較をシンプルに書ける
辞書と集合は、条件分岐・ループ・データ処理を支える重要な基礎です。
ぜひ実際にコードを書き、動かしながら理解を深めてください。

コメント