1. ホーム
  2. python

[解決済み] ネストされたすべてのディクショナリー値をループスルーしますか?

2022-04-28 05:06:11

質問

for k, v in d.iteritems():
    if type(v) is dict:
        for t, c in v.iteritems():
            print "{0} : {1}".format(t, c)

辞書をループして、値がネストされた辞書でないすべてのキーと値のペアをプリントアウトしようとしています。値が辞書の場合、その中に入り、そのキーと値のペアをプリントアウトしたいのですが・・・・・・。どのようなヘルプ?

EDIT

これはどうでしょう?これでも1つしか印刷されません。

def printDict(d):
    for k, v in d.iteritems():
        if type(v) is dict:
            printDict(v)
        else:
            print "{0} : {1}".format(k, v)

テストケース全体

辞書

{u'xml': {u'config': {u'portstatus': {u'status': u'good'}, u'target': u'1'},
      u'port': u'11'}}

結果

xml : {u'config': {u'portstatus': {u'status': u'good'}, u'target': u'1'}, u'port': u'11'}

解決方法は?

Niklas が言ったように、再帰性が必要です。つまり、dict を表示する関数を定義し、もし値が dict であれば、この新しい dict を使って print 関数を呼び出したいのです。

のようなものです。

def myprint(d):
    for k, v in d.items():
        if isinstance(v, dict):
            myprint(v)
        else:
            print("{0} : {1}".format(k, v))