Python - ネストされた辞書

こんにちは、挑戦しているコーダーの皆さん!今日は、Pythonのネストされた辞書の素晴らしい世界に飛び込んでいきます。プログラミングに新手だとしても心配しないで、私がこれまで教えた無数の学生たちに対して一緒に進めたように、このトピックをステップバイステップにガイドします。だから、お気に入りの飲み物を用意し、快適な場所に座り、一緒にこのPythonの冒険に出かけましょう!

Python - Nested Dictionaries

ネストされた辞書

ネストされた辞書とは?

大きな箱(メインの辞書)があって、その中にいくつかの小さな箱(ネストされた辞書)が入っていると想像してみてください。これらの小さな箱にはさまざまなアイテム(キーと値のペア)が入っています。それが基本的にネストされた辞書です - 辞書の中に辞書があるのです。

簡単な例から始めましょう:

student = {
"name": "Alice",
"age": 20,
"grades": {
"math": 95,
"science": 88,
"history": 92
}
}

この例では、studentが私たちのメインの辞書です。Aliceに関する基本的な情報を含んでおり、ネストされた辞書gradesが彼女の異なる科目の点数を保持しています。

Pythonでネストされた辞書を作成する

ネストされた辞書を作成するのは通常の辞書を作成するのと似ていますが、さらに辞書を値として追加しています。もっと複雑な例として、学校のディレクトリを作成しましょう:

school = {
"Grade 9": {
"Alice": {
"age": 14,
"subjects": ["Math", "Science", "English"]
},
"Bob": {
"age": 15,
"subjects": ["History", "Art", "PE"]
}
},
"Grade 10": {
"Charlie": {
"age": 16,
"subjects": ["Physics", "Chemistry", "Biology"]
}
}
}

ここに、私たちのメインの辞書schoolがあり、キーとして学年があります。各学年には学生の名前がキーとなる辞書が含まれています。各学生には個人の情報を持つ独自の辞書があります。

Pythonでネストされた辞書にアイテムを追加する

ネストされた辞書にアイテムを追加するのは簡単です。既存のネストされた辞書に新しいキーと値のペアを追加するか、まったく新しいネストされた辞書を作成することができます。

Grade 10に新しい学生を追加してみましょう:

school["Grade 10"]["Diana"] = {
"age": 15,
"subjects": ["Math", "Computer Science", "Literature"]
}

print(school["Grade 10"])

出力:

{
'Charlie': {'age': 16, 'subjects': ['Physics', 'Chemistry', 'Biology']},
'Diana': {'age': 15, 'subjects': ['Math', 'Computer Science', 'Literature']}
}

新しい学年を追加することもできます:

school["Grade 11"] = {
"Eve": {
"age": 17,
"subjects": ["Economics", "Psychology", "French"]
}
}

print(school.keys())

出力:

dict_keys(['Grade 9', 'Grade 10', 'Grade 11'])

Pythonでネストされた辞書のアイテムにアクセスする

ネストされた辞書のアイテムにアクセスするには、ネストのレベルに応じて複数の角括弧を使用します。私たちのschool辞書から情報を取得してみましょう:

# Aliceの年齢を取得
alice_age = school["Grade 9"]["Alice"]["age"]
print(f"Alice's age: {alice_age}")

# Charlieの科目を取得
charlie_subjects = school["Grade 10"]["Charlie"]["subjects"]
print(f"Charlie's subjects: {charlie_subjects}")

出力:

Alice's age: 14
Charlie's subjects: ['Physics', 'Chemistry', 'Biology']

ネストされた辞書の構造に不安がある場合は、get()メソッドを使用してKeyError例外を回避することができます:

# 存在しない学生を取得しようとする
frank_age = school.get("Grade 9", {}).get("Frank", {}).get("age", "Not found")
print(f"Frank's age: {frank_age}")

出力:

Frank's age: Not found

ネストされた辞書から辞書を削除する

ネストされた辞書を削除するには、delキーワードを使用します。Grade 9からBobを削除してみましょう:

del school["Grade 9"]["Bob"]
print(school["Grade 9"])

出力:

{'Alice': {'age': 14, 'subjects': ['Math', 'Science', 'English']}}

ネストされた辞書からアイテムを削除する際には注意してください。キーが存在することを常に確認し、KeyError例外を回避してください。

Pythonでネストされた辞書を反復処理する

ネストされた辞書を反復処理するには、ネストされたループが必要です。私たちのschool辞書のすべての情報を印刷しましょう:

for grade, students in school.items():
print(f"\n{grade}:")
for student, info in students.items():
print(f"  {student}:")
for key, value in info.items():
print(f"    {key}: {value}")

出力:

Grade 9:
Alice:
age: 14
subjects: ['Math', 'Science', 'English']

Grade 10:
Charlie:
age: 16
subjects: ['Physics', 'Chemistry', 'Biology']
Diana:
age: 15
subjects: ['Math', 'Computer Science', 'Literature']

Grade 11:
Eve:
age: 17
subjects: ['Economics', 'Psychology', 'French']

このネストされたループ構造により、私たちはネストされた辞書のすべてのレベルにアクセスし、印刷することができます。

ネストされた辞書を操作するためのメソッド

以下は、ネストされた辞書を操作するための便利なメソッドの一覧です:

メソッド 説明
dict.items() 辞書のキーと値のペアを含むビューオブジェクトを返します
dict.keys() 辞書のキーを含むビューオブジェクトを返します
dict.values() 辞書の値を含むビューオブジェクトを返します
dict.get(key, default) 指定されたキーが存在する場合はその値を返し、存在しない場合はデフォルト値を返します
dict.update(other_dict) 他の辞書またはキーと値のペアのイテラブルを使用して辞書を更新します
dict.pop(key, default) 指定されたキーを削除し、その値を返します。キーが存在しない場合はデフォルト値を返します

これらのメソッドは、ネストされた辞書の任意のレベルで適用できます。

それでは、私の愛する学生たち!私たちはPythonのネストされた辞書のすべての側面を探求しました。作成とアイテムの追加から、アクセス、削除、反復処理まで、あなたにはこれらの複雑なデータ構造を操作するためのツールがあります。

プログラミングの概念どおり、実践は鍵です。自分のネストされた辞書を作成してみてください、デジタルライブラリーカタログやレシピブックなど。これらの構造をより多く遊ぶほど、より楽になります。

忘れないでください、プログラミングの世界では、ミスはただの学びの機会です。だから、実験し、ミスを犯しても心配しないで - それが私たちがコーダーとして成長する方法です。コーディングを続け、学び続け、そして最も重要なのは、Pythonを楽しんでください!

Credits: Image by storyset