Pythonで辞書の中に辞書を追加する方法と辞書のネスト化についての初心者向け解説

Pythonで辞書の中に辞書を設定する方法と、辞書のキーや値を取得する方法の初心者向けの解説

今回はPythonの辞書の中に、その要素として別の辞書を設定する方法について解説します。もちろん最も初歩的な辞書の作り方、その操作の仕方と同じです。

辞書の中に辞書を設定する

新しい辞書を作る

まずは新しい辞書を1つ作りましょう。次のコードを入力します。

#新しい辞書の作成
student_dict={
    'id':'A0283456', 
    'name':'Tom', 
}
student_dict

今回は生徒の情報を扱う辞書という感じにしました。生徒のID番号と名前が入力されています。

実行結果は、

{'id': 'A0283456', 'name': 'Tom'}

です。

「コロン(:)」の←側が「キー(Key)」で、→側が「値(Value)」です。

辞書の辞書を入れる(辞書のネスト化)

では、上記の辞書に、別の辞書を追加で挿入してみましょう。つまり、辞書の中に辞書が入っている、多重構造の辞書となります。

そのような入れ子(多重構造)の状態を「ネスト」と言います。今回は辞書がネストになっているので、ネストされた辞書という言い方になりますかね。

そのコードは次のようになります。

#新しい要素(キー:値)の追加
student_dict['scores'] = {
    'Mathematics': 53, 
    'Engish': 78,
    'Science': 36, 
}
student_dict

scoresというキーに対して、数学の点数、英語の点数、理科の点数の3つを辞書にして設定しました。

実際にこれを実行すると、

{'id': 'A0283456',
 'name': 'Tom',
 'scores': {'Engish': 78, 'Mathematics': 53, 'Science': 36}}

このように表示されて、たしかにscoresの値として、辞書が埋め込まれていますね。このキーと値の対応関係を表にします。

キー
id文字列としてのA0283456
name文字列としてのTom
scores辞書としての {‘Engish’: 78, ‘Mathematics’: 53, ‘Science’: 36}}

辞書のキーの一覧を取得する方法

では次に、上のように作った辞書student_dictのキーの値を全て取得してみましょう。辞書オブジェクトの組み込みメソッドのkeys()を使って次のようにします。

#キーのリスト
student_dict.keys()

「keys」と複数形にすることに注意してください。「s」を忘れるとエラーになります。

これを実行すると、

dict_keys(['id', 'name', 'scores'])

このようになります。

辞書の値を取得する方法

次に同様に値を全て取得してみましょう。今度はvalues()メソッドを使って次のようにします。

#値のリスト
student_dict.values()

実行結果は、

dict_values(['A0283456', 'Tom', {'Mathematics': 53, 'Engish': 78, 'Science': 36}])

きちんと、scoresというキーに対応する値として、辞書が表示されていますね。

辞書のキーと値をまとめたタプルの一覧を取得する方法

最後に、辞書のキーと値をセットにしたタプルの一覧を取得してみましょう。そのためにはitems()メソッドを使います。これも複数形の「s」を忘れないようにしましょう。

student_dict.items()

実行結果は、

dict_items([('id', 'A0283456'), ('name', 'Tom'), ('scores', {'Mathematics': 53, 'Engish': 78, 'Science': 36})])

このようになります。それぞれのセットが、タプル形式、つまり(○, △)という形になっていますね。

辞書ビューオブジェクトのリスト化

以上のようにキー、値、そして(キー, 値)のタプルを取得できましたが、その結果をよく見ると、全て「dict_XXX」という見慣れない形式になっていますよね。

実はそれはPython上でも特別な、「辞書ビューオブジェクト」というオブジェクトになっています。

公式ドキュメントでは次のように説明されています。

dict.keys()dict.values()dict.items() によって返されるオブジェクトは、 ビューオブジェクト です。これらは、辞書の項目の動的なビューを提供し、辞書が変更された時、ビューはその変更を反映します。

Python公式ドキュメント「辞書ビューオブジェクト¶」

詳しいことの説明は省きますが、上述のように単純なタプルオブジェクトやリストオブジェクトではなく、特別なオブジェクトなのでそのままでは「使いにくい」状態です。

実際に試しに、items()メソッドを使った結果の型を調べてみましょう。

type(student_dict.items())

こうすると実行結果は、

dict_items

となり、tuppleやlistとは表示されません。

そこでこの使いにくいを試しにリストにしてみましょう。list()を使います。

list(student_dict.items())

こうすると、

[('id', 'A0283456'),
 ('name', 'Tom'),
 ('scores', {'Engish': 78, 'Mathematics': 53, 'Science': 36})]

と、ちゃんとリストになって出力されました。これで通常のリストを扱うように、処理をすることができますね。

なお関数のネストについては以下の過去記事を読んで見てください。

業界大手のテックアカデミーならPythonを短期間で効率的に学べます

プログラミングを学びIT業界へ転職するなら現役エンジニアから学べるプログラミングスクールTechAcademy [テックアカデミー]でオンライン講座を受講するのが良いと思います。1人で悩みながら学習を進めるよりもわかりやすく、費やす時間も少なく合理的・効率的に学習できるからです。

など各種の講座が用意されています。無料で体験できるテックアカデミー無料体験も用意されています。