辞書(dict)は、キーと値のペアでデータを管理するデータ構造です。名前で値を素早く検索できるため、設定情報やユーザーデータの管理など、実務で最もよく使われるデータ構造の一つです。
この記事では、辞書の作成方法から、要素の追加・削除・検索、ループ処理、便利なメソッドまで詳しく解説します。
基本的な使い方
辞書は波括弧 {} で作成します。キー: 値 の形でペアを記述します。
Python
# 辞書の作成
user = {
"name": "太郎",
"age": 25,
"city": "東京"
}
print(user)
print(f"名前: {user['name']}")
print(f"年齢: {user['age']}")
# 要素数
print(f"要素数: {len(user)}")
実行結果
{'name': '太郎', 'age': 25, 'city': '東京'}
名前: 太郎
年齢: 25
要素数: 3
要素の追加・更新・削除
Python
user = {"name": "太郎", "age": 25}
# 追加・更新
user["email"] = "taro@example.com" # 新しいキー = 追加
user["age"] = 26 # 既存のキー = 更新
print(user)
# 複数のキーを一度に更新
user.update({"city": "東京", "age": 27})
print(user)
# 削除
del user["email"] # キーを指定して削除
age = user.pop("age") # 削除して値を返す
print(f"削除した年齢: {age}")
print(user)
実行結果
{'name': '太郎', 'age': 26, 'email': 'taro@example.com'}
{'name': '太郎', 'age': 27, 'email': 'taro@example.com', 'city': '東京'}
削除した年齢: 27
{'name': '太郎', 'city': '東京'}
安全な値の取得
存在しないキーにアクセスすると KeyError が発生します。get()メソッドを使うと安全に値を取得できます。
Python
user = {"name": "太郎", "age": 25}
# get()メソッド:キーがなければデフォルト値を返す
print(user.get("name")) # 太郎
print(user.get("email")) # None
print(user.get("email", "未設定")) # 未設定
# キーの存在チェック
if "name" in user:
print(f"名前: {user['name']}")
if "email" not in user:
print("メールアドレスは未登録です")
実行結果
太郎
None
未設定
名前: 太郎
メールアドレスは未登録です
辞書のループ
Python
scores = {"数学": 85, "英語": 72, "国語": 90}
# キーのみ
for subject in scores:
print(subject, end=" ")
print()
# 値のみ
for score in scores.values():
print(score, end=" ")
print()
# キーと値のペア
for subject, score in scores.items():
print(f"{subject}: {score}点")
実行結果
数学 英語 国語
85 72 90
数学: 85点
英語: 72点
国語: 90点
辞書の内包表記
辞書もリストと同様に、内包表記で簡潔に作成できます。
Python
# 辞書内包表記
squares = {x: x**2 for x in range(1, 6)}
print(squares)
# 条件付き
scores = {"数学": 85, "英語": 72, "国語": 90, "理科": 55}
passed = {k: v for k, v in scores.items() if v >= 70}
print(f"合格科目: {passed}")
実行結果
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
合格科目: {'数学': 85, '英語': 72, '国語': 90}
辞書のキーに使える型
辞書のキーには、イミュータブル(変更不可)な型のみ使えます。文字列、数値、タプルはキーに使えますが、リストや辞書はキーに使えません。
辞書の順序について
Python 3.7以降、辞書は挿入順序を保持するようになりました。それ以前のバージョンでは順序が保証されないため、順序が重要な場合は collections.OrderedDict を使う必要がありました。
まとめ
- 辞書は
{キー: 値}でデータをペアで管理する get()メソッドで安全に値を取得できる.items(),.keys(),.values()でループできる- 辞書内包表記で簡潔に辞書を作成できる
- キーにはイミュータブルな型のみ使用可能