辞書(dict)
辞書とは
辞書はキーと値のペアを格納するデータ構造です。キーを使って高速に値を取得できます。
# 辞書の作成
user = {
"name": "太郎",
"age": 25,
"city": "東京"
}
# dict() コンストラクタ
config = dict(host="localhost", port=8080, debug=True)
# 空の辞書
empty = {}
基本操作
値の取得
user = {"name": "太郎", "age": 25, "city": "東京"}
# ブラケット記法
print(user["name"]) # 太郎
# print(user["email"]) # KeyError!
# get() メソッド(キーがなくてもエラーにならない)
print(user.get("name")) # 太郎
print(user.get("email")) # None
print(user.get("email", "未設定")) # 未設定(デフォルト値)
追加・更新
user = {"name": "太郎", "age": 25}
# 追加
user["email"] = "taro@example.com"
# 更新
user["age"] = 26
# 複数同時に更新
user.update({"age": 27, "city": "大阪"})
# setdefault(キーがなければ設定、あればそのまま)
user.setdefault("country", "日本")
削除
user = {"name": "太郎", "age": 25, "city": "東京"}
# del文
del user["city"]
# pop(値を取り出して削除)
age = user.pop("age")
print(age) # 25
# pop(キーがない場合のデフォルト値)
email = user.pop("email", None)
# 全削除
user.clear()
ループ
scores = {"数学": 85, "英語": 72, "国語": 90}
# キーでループ
for subject in scores:
print(subject)
# 値でループ
for score in scores.values():
print(score)
# キーと値のペアでループ
for subject, score in scores.items():
print(f"{subject}: {score}点")
# キーの存在チェック
if "数学" in scores:
print(f"数学: {scores['数学']}点")
辞書のネスト
students = {
"太郎": {
"age": 20,
"scores": {"数学": 85, "英語": 72}
},
"花子": {
"age": 21,
"scores": {"数学": 92, "英語": 88}
}
}
# アクセス
print(students["太郎"]["scores"]["数学"]) # 85
辞書内包表記
# 基本
squares = {x: x**2 for x in range(1, 6)}
# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 条件付き
even_squares = {x: x**2 for x in range(1, 11) if x % 2 == 0}
# {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}
# 2つのリストから辞書を作成
keys = ["name", "age", "city"]
values = ["太郎", 25, "東京"]
user = dict(zip(keys, values))
# {"name": "太郎", "age": 25, "city": "東京"}
便利なメソッド
d = {"a": 1, "b": 2, "c": 3}
print(list(d.keys())) # ['a', 'b', 'c']
print(list(d.values())) # [1, 2, 3]
print(list(d.items())) # [('a', 1), ('b', 2), ('c', 3)]
print(len(d)) # 3
# 辞書のマージ(Python 3.9+)
d1 = {"a": 1, "b": 2}
d2 = {"b": 3, "c": 4}
merged = d1 | d2 # {"a": 1, "b": 3, "c": 4}
まとめ
- 辞書はキーと値のペアを格納する
get()を使うとキーが存在しない場合も安全items()でキーと値のペアを同時にループできる- 辞書内包表記で簡潔に辞書を作成できる