辞書の基本操作を学ぼう
学習の目標
本章では、以下の内容を学習します。
- 辞書とは何かを理解する
- 辞書の作成方法と基本的な構造を習得する
- キーと値の関係を理解する
- 辞書から値を取得する方法を学ぶ
- 辞書に新しいキーと値を追加する方法を習得する
- 既存の値を更新する方法を理解する
辞書とは何か
これまでリストを使って複数のデータを管理する方法を学んできました。 リストは要素を順番に並べて、インデックス(0, 1, 2...)を使って各要素にアクセスしていました。
しかし、実際のデータ管理では、順番よりも「意味のある名前」で情報を管理したい場面がよくあります。 例えば、人の情報を管理する場合、「1番目が名前、2番目が年齢、3番目が住所」と覚えるより、「名前」「年齢」「住所」という名前で直接アクセスできた方が分かりやすいでしょう。
そこで便利なのが辞書(dictionary)です。 辞書は、キー(key)と値(value)の組み合わせでデータを管理するデータ構造です。
日常生活の辞書を思い浮かべてみてください。 日本語辞書では「単語」(キー)を調べると「意味」(値)が分かりますね。 Pythonの辞書も同じような仕組みで、キーを指定すると対応する値を取得できます。
辞書の大きな特徴は、データにアクセスする際にインデックス番号ではなく、意味のある名前(キー)を使用できることです。 これにより、より直感的で分かりやすいプログラムを作成できます。
辞書の基本的な作成方法
辞書を作成するには、波括弧{}
を使用します。 キーと値の組み合わせはキー: 値
の形式で記述し、複数の組み合わせはカンマ,
で区切ります。
VS Codeで新しいファイル dict_basic.py
を作成して、以下のコードを入力してみましょう。
# 学生の情報を辞書で管理
student = {
"name": "田中太郎",
"age": 20,
"major": "情報科学"
}
# 辞書を表示
print("学生情報:")
print(student)
このプログラムでは、一人の学生の情報を辞書で管理しています。 "name"
、"age"
、"major"
がキーで、それぞれに対応する値が"田中太郎"
、20
、"情報科学"
となっています。 キーは文字列で記述し、値には文字列、数値、その他のデータ型を使用できます。
このプログラムをターミナルで実行してみてください。
python dict_basic.py
実行結果は以下のようになります。
学生情報:
{'name': '田中太郎', 'age': 20, 'major': '情報科学'}
辞書は波括弧で囲まれて表示され、各キーと値の組み合わせがコロン(:)で結ばれていることが確認できます。
様々なデータ型を値として使用
辞書の値には、文字列や数値だけでなく、リストや真偽値など様々なデータ型を使用できます。
# より詳細な情報を含む辞書
person = {
"name": "佐藤花子",
"age": 25,
"married": True,
"hobbies": ["読書", "映画鑑賞", "料理"],
"address": "東京都"
}
print("個人情報:")
print(person)
print()
print("データ型の確認:")
print(f"name: {type(person['name'])}")
print(f"age: {type(person['age'])}")
print(f"married: {type(person['married'])}")
print(f"hobbies: {type(person['hobbies'])}")
このコードでは、同じ辞書の中に文字列、整数、真偽値、リストといった異なるデータ型の値を保存しています。 type()
関数を使って、各値のデータ型を確認することで、辞書が様々な種類のデータを柔軟に管理できることを確認できます。
実行結果は以下のようになります。
個人情報:
{'name': '佐藤花子', 'age': 25, 'married': True, 'hobbies': ['読書', '映画鑑賞', '料理'], 'address': '東京都'}
データ型の確認:
name: <class 'str'>
age: <class 'int'>
married: <class 'bool'>
hobbies: <class 'list'>
このように、辞書は一つの変数の中に、異なる種類の関連するデータをまとめて管理できる便利なデータ構造です。
キーを使った値の取得
辞書からデータを取得するには、取得したい値に対応するキーを角括弧[]
の中に指定します。 これは、リストでインデックスを指定して要素を取得するのと似ていますが、数値の代わりに意味のある名前(キー)を使用する点が異なります。
# 商品情報の辞書を作成
product = {
"name": "ノートパソコン",
"price": 89800,
"brand": "TechCompany",
"in_stock": True
}
print("=== 商品情報 ===")
# 各項目を個別に取得して表示
print(f"商品名: {product['name']}")
print(f"価格: {product['price']}円")
print(f"ブランド: {product['brand']}")
print(f"在庫あり: {product['in_stock']}")
このプログラムでは、商品情報を辞書で管理し、各キーを指定して対応する値を取得しています。 product['name']
と記述することで、"name"
キーに対応する値である"ノートパソコン"
を取得できます。 キーを指定する際は、文字列として記述するため、シングルクォートまたはダブルクォートで囲む必要があります。
実行結果は以下のようになります。
=== 商品情報 ===
商品名: ノートパソコン
価格: 89800円
ブランド: TechCompany
在庫あり: True
キーを使用することで、「価格を知りたい」と思った時にproduct['price']
と直感的に記述できるため、プログラムが読みやすくなります。
存在しないキーへのアクセス
辞書に存在しないキーにアクセスしようとすると、KeyError
(キーエラー)が発生します。 このエラーを避けるためには、事前にキーが存在するかどうかを確認する方法があります。
# 書籍情報の辞書
book = {
"title": "Python入門",
"author": "山田太郎",
"pages": 250
}
print("書籍情報:", book)
print()
# 存在するキーにアクセス
print("タイトル:", book["title"])
# 存在しないキーへのアクセスを安全に行う
if "publisher" in book:
print("出版社:", book["publisher"])
else:
print("出版社の情報は登録されていません")
# get()メソッドを使った安全なアクセス
publisher = book.get("publisher", "不明")
print(f"出版社: {publisher}")
isbn = book.get("isbn")
if isbn is not None:
print(f"ISBN: {isbn}")
else:
print("ISBNは登録されていません")
このコードでは、辞書にキーが存在するかどうかを確認する2つの方法を示しています。
in
演算子を使用する方法では、"publisher" in book
でキーの存在を確認してからアクセスしています。 これにより、キーが存在しない場合にエラーが発生することを防げます。
get()
メソッドを使用する方法では、キーが存在しない場合のデフォルト値を指定できます。 book.get("publisher", "不明")
と記述すると、"publisher"
キーが存在すればその値を、存在しなければ"不明"
を返します。 デフォルト値を指定しない場合はNone
が返されます。
実行結果は以下のようになります。
書籍情報: {'title': 'Python入門', 'author': '山田太郎', 'pages': 250}
タイトル: Python入門
出版社の情報は登録されていません
出版社: 不明
ISBNは登録されていません
このような安全なアクセス方法を使うことで、エラーを発生させることなく辞書を操作できます。
辞書への新しいキーと値の追加
辞書は作成後に新しいキーと値の組み合わせを追加することができます。 新しい要素を追加するには、存在しないキーに対して値を代入します。
# 空の辞書から始める
car = {}
print("初期状態:", car)
# 新しいキーと値を追加
car["make"] = "トヨタ"
print("メーカー追加後:", car)
car["model"] = "カローラ"
print("モデル追加後:", car)
car["year"] = 2023
print("年式追加後:", car)
car["color"] = "白"
print("色追加後:", car)
print()
print("=== 完成した車両情報 ===")
print(f"メーカー: {car['make']}")
print(f"モデル: {car['model']}")
print(f"年式: {car['year']}")
print(f"色: {car['color']}")
このプログラムでは、空の辞書から始めて、段階的に新しいキーと値を追加しています。 car["make"] = "トヨタ"
のように、存在しないキーに値を代入することで、新しい要素が辞書に追加されます。 各段階で辞書の内容を表示することで、要素が追加される様子を確認できます。
実行結果は以下のようになります。
初期状態: {}
メーカー追加後: {'make': 'トヨタ'}
モデル追加後: {'make': 'トヨタ', 'model': 'カローラ'}
年式追加後: {'make': 'トヨタ', 'model': 'カローラ', 'year': 2023}
色追加後: {'make': 'トヨタ', 'model': 'カローラ', 'year': 2023, 'color': '白'}
=== 完成した車両情報 ===
メーカー: トヨタ
モデル: カローラ
年式: 2023
色: 白
空の辞書から始めて、必要な情報を段階的に追加していく方法は、ユーザーの入力を受け取って辞書を作成する場合などによく使用されます。
既存のキーの値を更新
すでに存在するキーに新しい値を代入すると、そのキーの値が更新されます。
# 学生の成績情報
grades = {
"math": 85,
"english": 78,
"science": 92
}
print("初期の成績:", grades)
# 英語の成績を更新
print("英語の再テストを受けました")
grades["english"] = 88
print("更新後の成績:", grades)
# 新しい科目を追加
grades["history"] = 76
print("歴史の成績追加後:", grades)
# 数学の成績も更新
grades["math"] = 90
print("数学の成績更新後:", grades)
このコードでは、既存のキー"english"
と"math"
に新しい値を代入することで、成績を更新しています。 また、存在しないキー"history"
に値を代入することで、新しい科目の成績を追加しています。
実行結果は以下のようになります。
初期の成績: {'math': 85, 'english': 78, 'science': 92}
英語の再テストを受けました
更新後の成績: {'math': 85, 'english': 88, 'science': 92}
歴史の成績追加後: {'math': 85, 'english': 88, 'science': 92, 'history': 76}
数学の成績更新後: {'math': 90, 'english': 88, 'science': 92, 'history': 76}
このように、同じ代入の構文を使って、新しい要素の追加と既存要素の更新の両方を行うことができます。
辞書の基本的な操作メソッド
辞書には、データの管理を便利にするための様々なメソッドが用意されています。 よく使用される基本的なメソッドを見てみましょう。
# レストランのメニュー辞書
menu = {
"ラーメン": 800,
"チャーハン": 700,
"餃子": 400,
"唐揚げ": 500
}
print("メニュー:", menu)
print()
# keys()メソッド - すべてのキーを取得
print("=== メニュー項目一覧 ===")
menu_items = menu.keys()
print("キー一覧:", list(menu_items))
# values()メソッド - すべての値を取得
print("\n=== 価格一覧 ===")
prices = menu.values()
print("価格一覧:", list(prices))
# items()メソッド - キーと値のペアを取得
print("\n=== メニューと価格 ===")
menu_pairs = menu.items()
for item, price in menu_pairs:
print(f"{item}: {price}円")
# len()関数 - 辞書の要素数を取得
print(f"\nメニュー項目数: {len(menu)}品")
このコードでは、辞書の基本的なメソッドを使用しています。
keys()
メソッドは、辞書のすべてのキーを取得します。 values()
メソッドは、すべての値を取得します。 items()
メソッドは、キーと値のペアをタプルの形で取得します。
これらのメソッドは辞書ビューオブジェクトを返すため、list()
関数でリストに変換して表示しています。 items()
メソッドの結果はfor
文で直接使用することが多く、キーと値を同時に取得して処理できます。
実行結果は以下のようになります。
メニュー: {'ラーメン': 800, 'チャーハン': 700, '餃子': 400, '唐揚げ': 500}
=== メニュー項目一覧 ===
キー一覧: ['ラーメン', 'チャーハン', '餃子', '唐揚げ']
=== 価格一覧 ===
価格一覧: [800, 700, 400, 500]
=== メニューと価格 ===
ラーメン: 800円
チャーハン: 700円
餃子: 400円
唐揚げ: 500円
メニュー項目数: 4品
これらのメソッドを使うことで、辞書の内容を様々な形で活用できます。
辞書の要素削除
辞書から要素を削除するには、del
文を使用します。
# ゲームのキャラクター情報
character = {
"name": "勇者",
"level": 10,
"hp": 100,
"mp": 50,
"temp_buff": "攻撃力アップ"
}
print("初期ステータス:", character)
# 一時的なバフ効果を削除
del character["temp_buff"]
print("バフ削除後:", character)
# レベルアップ処理
character["level"] = 11
character["hp"] = 110
character["mp"] = 55
print("レベルアップ後:", character)
# 存在確認してから削除
if "exp" in character:
del character["exp"]
print("経験値を削除しました")
else:
print("経験値の項目は存在しません")
del
文を使用する際は、存在しないキーを指定するとエラーが発生するため、必要に応じて事前に存在確認を行います。
実行結果は以下のようになります。
初期ステータス: {'name': '勇者', 'level': 10, 'hp': 100, 'mp': 50, 'temp_buff': '攻撃力アップ'}
バフ削除後: {'name': '勇者', 'level': 10, 'hp': 100, 'mp': 50}
レベルアップ後: {'name': '勇者', 'level': 11, 'hp': 110, 'mp': 55}
経験値の項目は存在しません
まとめ
本章では、Pythonの辞書の基本操作について学習しました。 理解できた内容は以下の通りです。
辞書はキーと値の組み合わせでデータを管理するデータ構造で、意味のある名前を使ってデータにアクセスできることを学びました。 波括弧{}
を使って辞書を作成し、コロン(:)でキーと値を結び付けます。
角括弧[]
にキーを指定することで対応する値を取得でき、存在しないキーにアクセスする際のエラー処理方法も習得しました。 in
演算子やget()
メソッドを使った安全なアクセス方法も理解しました。
また、新しいキーと値の追加、既存の値の更新、要素の削除といった基本的な操作方法を学びました。 辞書では同じ代入構文で追加と更新の両方を行うことができます。
さらに、keys()
、values()
、items()
などの基本的なメソッドを使って、辞書の内容を様々な形で取得・活用する方法を習得しました。
これで、辞書を使った基本的なデータ管理の技術が身につきました。
Starterプランでより詳しく学習
この先のコンテンツを読むにはStarterプラン以上が必要です。より詳細な解説、実践的なサンプルコード、演習問題にアクセスして学習を深めましょう。