辞書の基本:キーと値でデータを整理する#

はじめに#

これまでに、リストとタプルという二つのデータ構造について学んできました。どちらも複数のデータを順序立てて保存するのに便利でした。今回は、Pythonのもう一つの重要なデータ構造である「辞書(ディクショナリー / ディクト)」について学びます。辞書は、データを「キー」と「値」のペアで管理する仕組みで、特定の情報をすぐに見つけられるように整理するのに役立ちます。

辞書とは何か#

辞書は、実際の「国語辞典」や「英和辞典」と同じような考え方で理解できます。

  • 国語辞典では、「言葉(見出し語)」を引くと、その「意味」がわかります。
  • 英和辞典では、「英単語」を引くと、その「日本語訳」がわかります。

Pythonの辞書では、次のような関係があります。

  • 「キー(key)」が辞典の「見出し語」に相当します。
  • 「値(value)」がその「意味」や「訳」に相当します。

つまり、辞書は「キー」と「値」のペアを保存するデータ構造です。そして、「キー」を使って「値」を素早く取り出すことができます。

辞書の作り方#

辞書は波括弧 {} を使って作ります。キーと値のペアはコロン : でつなぎ、複数のペアはカンマ , で区切ります。

>
# 果物の名前と価格を保存する辞書
fruit_prices = {"りんご": 150, "バナナ": 100, "オレンジ": 120}

# 辞書の内容を表示
print(fruit_prices)
print(type(fruit_prices))  # データ型を確認
{'りんご': 150, 'バナナ': 100, 'オレンジ': 120}
<class 'dict'>

この例では、果物の名前(文字列)をキーとして、その価格(数値)を値として保存しています。

辞書から値を取り出す#

辞書からデータを取り出すには、角括弧 [] にキーを指定します。

>
fruit_prices = {"りんご": 150, "バナナ": 100, "オレンジ": 120}

# キーを指定して値を取得
apple_price = fruit_prices["りんご"]
banana_price = fruit_prices["バナナ"]

print("りんごの価格:", apple_price)
print("バナナの価格:", banana_price)
りんごの価格: 150
バナナの価格: 100

リストやタプルでは「何番目」という位置(インデックス)でデータを取り出しましたが、辞書では「キー」を使ってデータを取り出す点が大きな違いです。

キーが存在しない場合、エラーが発生します。

>
fruit_prices = {"りんご": 150, "バナナ": 100, "オレンジ": 120}

# 存在しないキーを指定するとエラーになります
# price = fruit_prices["メロン"]  # KeyError: 'メロン'

存在しないキーにアクセスしようとすると、KeyErrorが発生します。これは「指定されたキーが辞書に存在しません」という意味のエラーです。このエラーを避けるには、事前にキーの存在を確認するか、get()メソッドを使う方法があります。

キーの存在確認#

辞書にあるキーが存在するかどうかを確認するには、in演算子を使います。

>
fruit_prices = {"りんご": 150, "バナナ": 100, "オレンジ": 120}

# キーの存在確認
print("りんご" in fruit_prices)  # True
print("メロン" in fruit_prices)  # False

# 条件分岐と組み合わせる
fruit = "バナナ"
if fruit in fruit_prices:
    print(f"{fruit}の価格: {fruit_prices[fruit]}円")
else:
    print(f"{fruit}は商品リストにありません")
True
False
バナナの価格: 100円

辞書の値を安全に取得する#

get()メソッドを使うと、キーが存在しなくてもエラーにならずに、デフォルト値(指定しない場合はNone)を返します。

>
fruit_prices = {"りんご": 150, "バナナ": 100, "オレンジ": 120}

# 存在するキーの場合
apple_price = fruit_prices.get("りんご")
print("りんごの価格:", apple_price)

# 存在しないキーの場合
melon_price = fruit_prices.get("メロン")
print("メロンの価格:", melon_price)  # None

# デフォルト値を指定した場合
grape_price = fruit_prices.get("ぶどう", 0)  # 2つ目の引数でデフォルト値を指定できる
print("ぶどうの価格:", grape_price)  # 0(デフォルト値)
りんごの価格: 150
メロンの価格: None
ぶどうの価格: 0

辞書のキーと値の特徴#

キーについての制約#

辞書のキーには、変更不可(イミュータブル)なオブジェクトしか使えません。一般的に次の型がキーとして使えます。

  • 文字列(str)
  • 数値(int, float)
  • タプル(ただし、その中身もすべてイミュータブルである場合)
  • ブール値(True, False)

逆に、リストや辞書自体など、変更可能なオブジェクトはキーとして使えません。

値に対する制約はない#

一方、「値」の部分には、どんな型のデータでも入れることができます。文字列、数値、リスト、タプル、別の辞書なども入れることができます。

>
# さまざまな型の値を持つ辞書
various_values = {
    "name": "田中",               # 文字列
    "age": 25,                   # 数値
    "is_student": False,         # ブール値
    "hobbies": ["読書", "映画", "旅行"],  # リスト
    "address": ("東京都", "新宿区")   # タプル
}

print(various_values)
{'name': '田中', 'age': 25, 'is_student': False, 'hobbies': ['読書', '映画', '旅行'], 'address': ('東京都', '新宿区')}

実用例:複数の人の連絡先を管理する#

>
# 複数の人の連絡先を辞書のリストで管理
contacts = [
    {"name": "田中", "phone": "090-1234-5678", "email": "tanaka@example.com"},
    {"name": "佐藤", "phone": "090-8765-4321", "email": "sato@example.com"},
    {"name": "山田", "phone": "090-2222-3333", "email": "yamada@example.com"}
]

# すべての連絡先を表示
print("すべての連絡先:")
for contact in contacts:
    print(f"名前: {contact['name']}, 電話: {contact['phone']}, メール: {contact['email']}")

# 名前が「佐藤」の人の電話番号を取得
for contact in contacts:
    if contact["name"] == "佐藤":
        print(f"佐藤さんの電話番号: {contact['phone']}")
        break
すべての連絡先:
名前: 田中, 電話: 090-1234-5678, メール: tanaka@example.com
名前: 佐藤, 電話: 090-8765-4321, メール: sato@example.com
名前: 山田, 電話: 090-2222-3333, メール: yamada@example.com
佐藤さんの電話番号: 090-8765-4321

この例では、辞書のリストを使って複数の人の情報を管理しています。リストと辞書を組み合わせることで、複雑なデータも整理できます。

まとめ#

今回は、Pythonの辞書(dict)について学びました。辞書は、キーと値のペアでデータを管理する強力なデータ構造です。

  • 辞書は波括弧 {} で作成し、キーと値はコロン : で区切ります。
  • キーを指定して値を取り出したり、簡単な更新や追加ができます。
  • 辞書は、リストやタプルとは違い、「位置」ではなく「キー」でデータにアクセスします。
  • キーにはイミュータブルなオブジェクトしか使えませんが、値にはどんな型でも入れられます。

辞書は、複雑なデータを整理したり検索したりするのに非常に便利なデータ構造です。次回は、辞書の要素を追加・更新・削除するなどの操作方法について、さらに詳しく学んでいきます。