Pythonで辞書の深さを求める方法|文字列変換と再帰処理の2つのアプローチ
Pythonの辞書(dict)はネスト構造を持つことができます。つまり、辞書の中にさらに辞書が格納されている状態です。本記事では、ネストされた辞書の深さ(階層レベル)を求める2つの方法を、サンプルコード付きでわかりやすく解説します。
方法1:文字列への変換を利用する
このアプローチでは、まず辞書全体を文字列に変換します。その後、左波括弧「{」の出現回数を数えることで、辞書が何段階にネストされているかを判定できます。ネストが一段深くなるごとに「{」が1つ増えるため、その総数がそのまま辞書の深さになります。
サンプルコード
dictA = {1: 'Sun', 2: {3: {4:'Mon'}}}
dictStr = str(dictA)
cnt = 0
for i in dictStr :
if i == "{":
cnt += 1
print("The depth of dictionary: ",cnt)
実行結果
The depth of dictionary: 3
方法2:再帰処理を利用する
自分自身を再帰的に呼び出す関数を設計することでも、辞書の深さを正確に求められます。isinstance()で要素が辞書型かどうかを判定し、辞書である限り関数が自分自身を呼び出し続けます。値がすべて評価されると、最終的な深さが結果として返されます。空の辞書の場合は0を返すようになっているため、エッジケースにも対応しています。
サンプルコード
def finddepth(dictA):
if isinstance(dictA, dict):
return 1 + (max(map(finddepth, dictA.values()))
if dictA else 0)
return 0
dictA = {1: 'Sun', 2: {3: {4:'Mon'}}}
print("The depth of dictionary: ",finddepth(dictA))
実行結果
The depth of dictionary: 3
まとめ
文字列変換による方法はコードがシンプルで直感的ですが、あくまで「{」の数を数えているだけなので、キーや値の文字列の中に「{」が含まれる場合には誤った結果になる可能性がある点に注意が必要です。一方、再帰を利用する方法は辞書の実際の構造を正確にたどるため、より堅牢で信頼性の高いアプローチといえます。データの内容や用途に応じて、適切な方法を選択するとよいでしょう。
-
Pythonの辞書メソッド一覧|使い方と機能をわかりやすく解説
はじめに Pythonの辞書(dict)は、キーと値のペアでデータを管理できる非常に便利なデータ構造です。この記事では、辞書で直接使える辞書メソッドと、辞書の操作に役立つ組み込み関数を一覧表にまとめて紹介します。それぞれの機能を把握しておくと、日常的なコーディングの効率が大きく向上します。 辞書の主なメソッド一覧 以下は、Pythonの辞書オブジェクトで利用できる代表的なメソッドです。 No.メソッド名と説明 1dict.clear()辞書内のすべての要素(キーと値のペア)を削除します。 2dict.copy()辞書のコピー(浅いコピー)を作成して返します。 3dict.fromkeys(
-
Pythonの辞書でゼロ以外の値の平均を求める方法
Pythonの辞書に含まれる数値から、ゼロ(0)の値を除外した平均を計算したいケースはよくあります。最もシンプルで読みやすい方法は、辞書を走査してゼロ以外の値だけを抽出し、その合計を要素数で割ることです。基本的な手順辞書を反復処理し、ゼロ以外の値だけをリスト内包表記でフィルタリングするフィルタリング後の値の合計を sum() で求める合計を len() で取得した要素数で割るコード例my_dict = {foo: 100, bar: 0, baz: 200} filtered_vals = [v for _, v in my_dict.items() if v != 0] average =