Python入門
第6回:辞書と集合

Python

はじめに

これまでに学んだ リスト は、「順番に並んだデータの箱」でした。
しかし実際のプログラムでは、次のようなことをしたくなります。

  • 「この名前の人の年齢は?」
  • 「この設定項目の値は?」
  • 「同じデータが何回出てきた?」
  • 「前回と今回で何が変わった?」

このような処理は、リストだけでは非常にやりにくいです。
そこで登場するのが、

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

これは、

  1. age を取り出す
  2. 辞書から 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)

これは、

  1. set に変換 → 重複が消える
  2. 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() を使ったカウント処理は実務でも頻出
  • 集合は重複を自動で排除できるデータ型
  • 差分抽出やデータ比較をシンプルに書ける

辞書と集合は、条件分岐・ループ・データ処理を支える重要な基礎です。
ぜひ実際にコードを書き、動かしながら理解を深めてください。

コメント

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