Python 3における「辞書(Dictionary)」は、非常に強力で柔軟なデータ構造であり、キーと値のペアを格納するためのコンテナです。辞書は、他の多くのプログラミング言語で見られる「連想配列」や「ハッシュマップ」に相当します。Pythonの辞書は、データを効率的に管理・検索するための重要なツールです。
この記事では、Python 3における辞書の基本から応用までを包括的に説明し、その使い方を深く理解できるようにします。

1. 辞書の基本
Pythonの辞書は、{}
(中括弧)を使って作成されます。辞書は、キーと値を1対1の関係で管理します。キーはユニークでなければならず、値には任意のデータ型を使用できます。
辞書の作成
python# 空の辞書を作成
my_dict = {}
# キーと値を含む辞書を作成
person = {"name": "Taro", "age": 25, "city": "Tokyo"}
上記の例では、"name"
, "age"
, "city"
がキーで、これに対応する値としてそれぞれ "Taro"
, 25, "Tokyo"
が設定されています。
辞書のデータ型
辞書のキーは、変更不可(イミュータブル)なデータ型にする必要があります。一般的には、文字列、整数、タプルなどが使用されます。一方、値は変更可能(ミュータブル)なオブジェクトを含んでも構いません。例えば、リストや他の辞書を値として格納することができます。
pythonmy_dict = {1: "apple", 2: "banana", "a": [1, 2, 3]}
2. 辞書のアクセス方法
辞書に格納された値には、キーを使ってアクセスします。辞書から値を取り出すには、キーを指定してアクセスします。
値の取得
pythonperson = {"name": "Taro", "age": 25, "city": "Tokyo"}
# 'name' キーに対応する値を取得
print(person["name"]) # 出力: Taro
# 存在しないキーにアクセスするとエラーになる
# print(person["address"]) # KeyError: 'address'
get()メソッドを使ったアクセス
get()
メソッドは、キーが存在しない場合にエラーを発生させず、代わりに None
を返すか、指定したデフォルト値を返すことができます。
python# 'address' キーがない場合、Noneが返される
print(person.get("address")) # 出力: None
# 'address' キーがない場合、デフォルト値を設定することも可能
print(person.get("address", "Unknown")) # 出力: Unknown
3. 辞書の更新と削除
辞書の値を更新したり、辞書自体から項目を削除したりすることができます。
値の更新
pythonperson = {"name": "Taro", "age": 25, "city": "Tokyo"}
# 'age' キーの値を更新
person["age"] = 26
print(person) # 出力: {'name': 'Taro', 'age': 26, 'city': 'Tokyo'}
新しいキーと値の追加
辞書に新しい項目を追加するには、単純にキーと値を指定します。
pythonperson["address"] = "Shibuya"
print(person) # 出力: {'name': 'Taro', 'age': 26, 'city': 'Tokyo', 'address': 'Shibuya'}
要素の削除
del
キーワードを使って辞書からキーと値のペアを削除することができます。
pythondel person["city"]
print(person) # 出力: {'name': 'Taro', 'age': 26, 'address': 'Shibuya'}
また、pop()
メソッドを使って、削除した値を取得することもできます。
pythonaddress = person.pop("address")
print(address) # 出力: Shibuya
print(person) # 出力: {'name': 'Taro', 'age': 26}
4. 辞書のループ
辞書の全ての要素をループで処理することができます。Pythonでは、辞書のキー、値、またはキーと値のペアを直接ループすることができます。
キーのループ
pythonperson = {"name": "Taro", "age": 26, "city": "Tokyo"}
for key in person:
print(key)
# 出力:
# name
# age
# city
値のループ
pythonfor value in person.values():
print(value)
# 出力:
# Taro
# 26
# Tokyo
キーと値のペアのループ
pythonfor key, value in person.items():
print(f"{key}: {value}")
# 出力:
# name: Taro
# age: 26
# city: Tokyo
5. 辞書の演算
Pythonの辞書は、他のデータ構造と組み合わせて使用することができます。また、辞書同士の演算も可能です。
辞書の結合
複数の辞書を結合するには、update()
メソッドを使います。これにより、1つの辞書にもう1つの辞書を追加できます。
pythondict1 = {"name": "Taro", "age": 25}
dict2 = {"city": "Tokyo", "address": "Shibuya"}
dict1.update(dict2)
print(dict1) # 出力: {'name': 'Taro', 'age': 25, 'city': 'Tokyo', 'address': 'Shibuya'}
辞書のコピー
辞書をコピーするには、copy()
メソッドを使用します。これにより、元の辞書を変更してもコピーした辞書は影響を受けません。
pythonperson_copy = person.copy()
person_copy["age"] = 30
print(person) # 出力: {'name': 'Taro', 'age': 26, 'city': 'Tokyo'}
print(person_copy) # 出力: {'name': 'Taro', 'age': 30, 'city': 'Tokyo'}
6. 辞書の内包表記
Pythonでは、辞書の内包表記を使って、簡潔に辞書を作成したり変換したりすることができます。
辞書内包表記の例
python# 値を2倍にする新しい辞書を作成
numbers = {"a": 1, "b": 2, "c": 3}
doubled = {key: value * 2 for key, value in numbers.items()}
print(doubled) # 出力: {'a': 2, 'b': 4, 'c': 6}
7. よく使われる辞書メソッド
Pythonの辞書には、便利なメソッドがいくつか用意されています。
-
keys()
: 辞書の全てのキーを返します。 -
values()
: 辞書の全ての値を返します。 -
items()
: 辞書の全てのキーと値のペアを返します。 -
popitem()
: ランダムにキーと値のペアを削除して返します。 -
clear()
: 辞書の全ての要素を削除します。
まとめ
Pythonの辞書は非常に強力で便利なデータ構造です。キーと値のペアを効率的に管理でき、データの追加、削除、更新が容易に行えます。また、辞書の値に他のオブジェクトやデータ型を含めることもでき、柔軟性に優れています。辞書をうまく活用することで、Pythonプログラムの可読性と効率を大きく向上させることができます。