辞書の基本:キーと値でデータを整理する#
はじめに#
これまでに、リストとタプルという二つのデータ構造について学んできました。どちらも複数のデータを順序立てて保存するのに便利でした。今回は、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)について学びました。辞書は、キーと値のペアでデータを管理する強力なデータ構造です。
- 辞書は波括弧
{}
で作成し、キーと値はコロン:
で区切ります。 - キーを指定して値を取り出したり、簡単な更新や追加ができます。
- 辞書は、リストやタプルとは違い、「位置」ではなく「キー」でデータにアクセスします。
- キーにはイミュータブルなオブジェクトしか使えませんが、値にはどんな型でも入れられます。
辞書は、複雑なデータを整理したり検索したりするのに非常に便利なデータ構造です。次回は、辞書の要素を追加・更新・削除するなどの操作方法について、さらに詳しく学んでいきます。