Python の dict と set の違いを徹底解説【初心者でもわかる】

Python を学び始めると、必ず出てくるデータ構造が dict(辞書)set(集合) です。どちらも「重複しないデータを扱える」「高速に検索できる」といった共通点がありますが、役割と使いどころはまったく異なります。
この記事では、dict と set の違いを構造・使い方・具体例の 3 点から解説します。


dict とは何か?

dict(dictionary) は「キーと値のペア」でデータを管理するデータ型です。

user = {
    "name": "Taro",
    "age": 25,
    "country": "Japan"
}

dict の特徴

  • キーと値の組み合わせ(key: value)
  • キーは重複不可、値は重複 OK
  • キーを指定して値を高速に取得できる
  • データに意味づけができる

例えば、

print(user["name"])   # Taro

のように、キーを使って直感的にデータを取り出せます。

つまり、dict は
👉 「名前付きデータ」「設定情報」「オブジェクト的な構造」
を扱うのに最適です。


set とは何か?

set(集合) は「重複しない要素の集まり」を扱うデータ型です。

numbers = {1, 2, 3, 3, 4}
print(numbers)   # {1, 2, 3, 4}

set の特徴

  • 値だけを持つ(キーは存在しない)
  • 要素は必ず一意(重複しない)
  • 順序を持たない
  • 集合演算(和・積・差)ができる

例:

a = {1, 2, 3}
b = {3, 4, 5}

print(a | b)   # {1, 2, 3, 4, 5}  和集合
print(a & b)   # {3}             積集合
print(a - b)   # {1, 2}          差集合

つまり、set は
👉 「重複削除」「存在チェック」「集合演算」
に特化したデータ構造です。


dict と set の本質的な違い

比較項目dictset
データの構造キー: 値 のペア値のみ
重複キーは重複不可要素はすべて一意
順序Python3.7 以降は保持保持しない
主な用途データ管理・設定・マッピング重複排除・集合演算・存在判定
取得方法dict[key]in 演算子
要素の意味各要素に「名前」がある単なる値の集合

**決定的な違いは、「キーと値を持つかどうか」**です。
set は「値の集合」、dict は「名前付きの値の集合」です。


使い分けの具体例

① 設定データやオブジェクト的な管理 → dict

config = {
    "host": "localhost",
    "port": 8080,
    "debug": True
}

設定項目のように、項目名と値がセットになるデータは dict 一択です。


② 重複データを除去したい → set

names = ["A", "B", "A", "C", "B"]
unique_names = set(names)
print(unique_names)  # {'A', 'B', 'C'}

**「一意な値だけ欲しい」**ときは set が最速でシンプルです。


③ 存在チェックを高速にしたい → set

allowed_ips = {"192.168.0.1", "10.0.0.1"}

if "192.168.0.1" in allowed_ips:
    print("アクセス許可")

要素数が多い場合でも、set のinは高速に判定できます。


④ データに意味を持たせたい → dict

scores = {
    "math": 90,
    "english": 75,
    "science": 88
}

科目名と点数のように、値にラベルが必要な場合は dict が最適です。


よくある勘違い

「set はキーがない dict?」

❌ 間違いです。
dict は**「キー → 値」の対応関係を持つ構造、
set は
「値の集まり」**であり、キーという概念自体が存在しません。


「dict のキーは set みたいなもの?」

⭕ これは半分正解です。
実際、dict のキーは内部的に set と同様のハッシュ構造を使っています。
そのため、

  • 重複不可
  • 高速な検索

という性質が共通しています。


まとめ

  • dict:キーと値のペアで管理 → 意味のあるデータ構造向き
  • set:重複しない値の集合 → 重複除去・集合演算・存在判定向き