Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでネストされた辞書を再帰的に反復処理する方法

Pythonでは、辞書(dict)の中にさらに辞書が入れ子になった「ネストされた辞書」を扱うことがあります。このような多層構造のデータをすべて走査するには、再帰的なアプローチが最も効果的です。

以下は、ネストされた辞書オブジェクトの例です。

D1={1: {2: {3: 4, 5: 6}, 3: {4: 5, 6: 7}}, 2: {3: {4: 5}, 4: {6: 7}}}

再帰関数による反復処理

各キーに対応する値が辞書そのものである場合は、同じ関数を再帰的に呼び出して、より深い階層へと処理を進めます。値が辞書でない場合は、そのキーと値を出力します。

def iterdict(d):
  for k,v in d.items():
     if isinstance(v, dict):
         iterdict(v)
     else:
         print (k,":",v)

iterdict(D1)

コードのポイント

  • d.items(): 辞書からすべてのキーと値のペアを1つずつ取り出します。
  • isinstance(v, dict): 値が辞書型かどうかを判定します。辞書であれば再帰呼び出しを行います。
  • 再帰呼び出し: ネストの深さがいくらあっても、すべての階層を自動的にたどることができます。

実行結果

最初の辞書オブジェクトをこの関数に渡すと、すべてのキーと値のペアが順番に走査され、ネストされた内側の辞書の要素も含めてすべて出力されます。実行結果は次のとおりです。

3 : 4
5 : 6
4 : 5
6 : 7
4 : 5
6 : 7

このように再帰を使えば、階層の深さが事前にわからないネストされた辞書でも、シンプルなコードで確実に全要素へアクセスできます。JSONデータの解析や設定ファイルの処理など、実務でも頻繁に活用されるテクニックなので、ぜひマスターしておきましょう。

  1. Pythonで辞書を反復処理する2つの方法をわかりやすく解説

    Pythonの辞書(dict)オブジェクトを反復処理する方法は主に2つあります。1つ目は、keys()メソッドでキーのリストを取得し、各キーに対応する値を取り出す方法です。keys()メソッドを使った反復処理>>> D1 = {1:a, 2:b, 3:c} >>> for k in D1.keys(): print (k, D1[k]) 1 a 2 b 3 c keys()メソッドは辞書内のすべてのキーを返します。ループ内でキーを変数kに受け取り、D1[k]のように記述することで、そのキーに関連付けられた値へアクセスできます。items()メソッドを

  2. Pythonで文字列を辞書(dict)に変換する方法|ast.literal_evalとjson.loadsの使い分け

    Pythonでは、文字列形式で表現された辞書データを実際のdictオブジェクトに変換したい場面がよくあります。主な方法としては、標準ライブラリの ast.literal_eval() を使う方法と、json モジュールを使う方法の2つがあります。それぞれの特徴と使い方を詳しく見ていきましょう。 方法1:ast.literal_eval() を使う ast.literal_eval() は、文字列をPythonの式として安全に評価する関数です。任意のコードを実行できてしまう eval() とは異なり、リテラル構造以外は評価しないため、セキュリティ面でも安心して利用できます。 評価できるのは、文