Python の辞書 (dictionary) - ネスト (nest)

ネスト (nest)というのは、あるものの中に同じ種類のものが入っている構造のことです。

例えば for ループのコードブロッックの中で for ループを使う場合、「for 文をネストする」と言います。

ここでは Python の辞書がネストしているケースと、リストの要素に辞書、辞書の値にリストを保持するケースについてご説明します。

Python の辞書の値に辞書を保持する(辞書のネスト)

プログラミングをしていると、辞書の中に辞書をネストしたいような時があると思います。

例えば、今まで student という一人の学生の情報を持つ辞書を例に使っていましたが、students という名前の辞書を作って、その中に複数の学生にデータを保持して使いたいことがあるかもしれません。

そんな時は次のような感じで辞書をネストすることができます。

students = {
    "student1": {
        "name": "Suzuki",
        "age": 15,
        "gender": "male"
    },
    "student2": {
        "name": "Yamamoto",
        "age": 14,
        "gender": "female"
    }
}

print(students)
print(len(students))
print(students["student1"]["name"])

実行結果は次のようになります。

{'student1': {'name': 'Suzuki', 'age': 15, 'gender': 'Male'}, 'student2': {'name': 'Yamamoto', 'age': 14, 'gender': 'Female'}}
2
Suzuki

len() に辞書を渡すと、辞書内のキーと値のペアの数を返してくれます。この例では二つあるので、2 が返っています。

値の辞書内の値を取得したい時は、角括弧 [key] を並べて、students["student1"]["name"] のように取得することができます。

辞書をループして、各 student の情報を取得する方法は「Python の for 文 - 辞書(dictionary) 」をご覧ください。


先に辞書を作っておいて、後でまとめて他の辞書の中に入れることもできます。

student1 = {
    "name": "Suzuki",
    "age": 15,
    "gender": "male"
}

student2 = {
    "name": "Yamamoto",
    "age": 14,
    "gender": "female"
}

students = {
    "student1": student1,
    "student2": student2
}

print(students)

実行結果は次のようになり、先ほどできた students 辞書と全く同じです。

{'student1': {'name': 'Suzuki', 'age': 15, 'gender': 'Male'}, 'student2': {'name': 'Yamamoto', 'age': 14, 'gender': 'Female'}}

Python のリストの要素に辞書を保持する

Python のリストの要素に辞書を保持することも可能です。

student1 = {
    "name": "Suzuki",
    "age": 15,
    "gender": "male"
}

student2 = {
    "name": "Yamamoto",
    "age": 14,
    "gender": "female"
}

students = [student1, student2]
print(students)
print(students[0]["name"])

実行結果は次のようになります。リストにキーはないので要素の辞書にアクセスする際にはインデックスを指定します。

[{'name': 'Suzuki', 'age': 15, 'gender': 'Male'}, {'name': 'Yamamoto', 'age': 14, 'gender': 'Female'}]
Suzuki

Python の辞書の値にリストを保持する

反対に辞書の値にリストを保持することも可能です。

例えば、次のように classes というキーで科目のリストを追加することができます。

student = {
    "name": "Suzuki",
    "age": 15,
    "gender": "Male",
    "classes": ["Math", "History", "English"]
}

print(student)
print(student["classes"][1])

実行結果は次のようになります。リスト内の要素には [リストの値を持つキー][リストのインデックス] のようにしてアクセスできます。

{'name': 'Suzuki', 'age': 15, 'gender': 'Male', 'classes': ['Math', 'History', 'English']}
History

以上、Python の辞書の値に辞書、リストの要素に辞書、辞書の値にリストを保持するケースについて、それぞれご説明しました。

© 2024 やさしい Python 入門