Pythonには、複数のデータをまとめて管理するための強力なデータ型としてリストがありますが、それとは異なる方法でデータを整理する**辞書(dictionary)**というデータ型も存在します。
リストが**順番(インデックス)でデータを管理するのに対し、辞書はキー(key)と値(value)**のペアでデータを管理します。この記事では、辞書の基本的な概念と、リストとの違い、そして実用的な使い方について解説します。
目次
辞書とリストの比較
順序の扱い
リストと辞書の最も大きな違いは、順序をどう扱うかです。
- リスト: 要素の順序が重要です。同じ要素が含まれていても、順序が異なれば、別のリストとして扱われます。
- 辞書: キーと値のペアで構成され、要素の順序は等価性の判断に影響しません。(※Python 3.7以降、辞書は挿入順序を保持しますが、等しいかどうかの比較では順序は無視されます。)
# リストの比較
list_a = ["apple", "banana", "cherry"]
list_b = ["cherry", "banana", "apple"]
print(f"リストの比較: {list_a == list_b}") # 出力: False
# 辞書の比較
# {キー: 値} の形式で定義
user_a = {"name": "Taro", "age": 30, "city": "Tokyo"}
user_b = {"age": 30, "city": "Tokyo", "name": "Taro"}
print(f"辞書の比較: {user_a == user_b}") # 出力: True
キーを使ったアクセス
リストが0
から始まるインデックスで値にアクセスするのに対し、辞書はキーを使って値にアクセスします。
user = {"name": "Taro", "age": 30, "city": "Tokyo"}
# "name"キーに対応する値を取得
print(user["name"]) # 出力: Taro
もし辞書に存在しないキーでアクセスしようとすると、KeyError
というエラーが発生します。
# user["country"] # この行はKeyErrorを引き起こします
辞書の実用例:連絡先管理
辞書は、特定のキーに関連付けられた情報を保存・検索するのに非常に適しています。ここでは、名前をキーとして電話番号を管理する簡単な連絡先プログラムの例を見てみましょう。
# 連絡先を保存するための空の辞書
contacts = {
"Alice": "090-1111-2222",
"Bob": "080-3333-4444"
}
# ユーザーからの入力を受け付けるループ
while True:
print("\n名前を入力してください(終了するにはEnterキーだけ押してください):")
name = input()
if name == "":
break
# 入力された名前が辞書に存在するかチェック
if name in contacts:
# 存在すれば、対応する電話番号を表示
print(f"{name}さんの電話番号は {contacts[name]} です。")
else:
# 存在しなければ、新規登録を促す
print(f"{name}さんの電話番号は未登録です。")
print("電話番号を登録してください:")
phone_number = input()
# 新しいキーと値のペアを辞書に追加
contacts[name] = phone_number
print("連絡先を更新しました。")
このプログラムは、以下のことを行っています。
name in contacts
で、入力された名前がキーとして存在するかどうかを効率的にチェックします。- 存在するキーであれば、
contacts[name]
で対応する値をすぐに取り出します。 - 存在しないキーであれば、
contacts[name] = phone_number
という簡単な代入文で、新しいキーと値のペアを追加(登録)できます。
まとめ
- リストは順序付けられた要素の集まりで、インデックスでアクセスします。
- 辞書はキーと値のペアの集まりで、キーでアクセスします。
- 辞書は、特定のキーに対応する値を高速に検索したり、関連するデータをまとめて管理したりするのに非常に便利です。
データの性質に応じてリストと辞書を適切に使い分けることが、効率的なPythonプログラミングの鍵となります。