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 の本質的な違い
| 比較項目 | dict | set |
|---|---|---|
| データの構造 | キー: 値 のペア | 値のみ |
| 重複 | キーは重複不可 | 要素はすべて一意 |
| 順序 | 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:重複しない値の集合 → 重複除去・集合演算・存在判定向き
