首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >循环遍历所有嵌套的字典值?

循环遍历所有嵌套的字典值?
EN

Stack Overflow用户
提问于 2012-05-25 22:41:23
回答 13查看 284.9K关注 0票数 150
代码语言:javascript
复制
for k, v in d.iteritems():
    if type(v) is dict:
        for t, c in v.iteritems():
            print "{0} : {1}".format(t, c)

我尝试遍历字典并打印出值不是嵌套字典的所有键值对。如果值是一个字典,我想进入它并打印出它的键值pairs...etc。有什么帮助吗?

编辑

这个怎么样?它仍然只打印一件东西。

代码语言:javascript
复制
def printDict(d):
    for k, v in d.iteritems():
        if type(v) is dict:
            printDict(v)
        else:
            print "{0} : {1}".format(k, v)

完整测试用例

字典:

代码语言:javascript
复制
{u'xml': {u'config': {u'portstatus': {u'status': u'good'}, u'target': u'1'},
      u'port': u'11'}}

结果:

代码语言:javascript
复制
xml : {u'config': {u'portstatus': {u'status': u'good'}, u'target': u'1'}, u'port': u'11'}
EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2012-05-25 22:47:57

正如Niklas所说,你需要递归,即你想定义一个函数来打印你的dict,如果值是dict,你想使用这个新dict调用你的print函数。

类似于:

代码语言:javascript
复制
def myprint(d):
    for k, v in d.items():
        if isinstance(v, dict):
            myprint(v)
        else:
            print("{0} : {1}".format(k, v))
票数 196
EN

Stack Overflow用户

发布于 2012-05-25 23:22:21

另一种迭代解决方案:

代码语言:javascript
复制
def myprint(d):
    stack = d.items()
    while stack:
        k, v = stack.pop()
        if isinstance(v, dict):
            stack.extend(v.iteritems())
        else:
            print("%s: %s" % (k, v))
票数 30
EN

Stack Overflow用户

发布于 2016-02-13 20:55:59

我写的版本略有不同,它跟踪了到达那里的过程中的关键字

代码语言:javascript
复制
def print_dict(v, prefix=''):
    if isinstance(v, dict):
        for k, v2 in v.items():
            p2 = "{}['{}']".format(prefix, k)
            print_dict(v2, p2)
    elif isinstance(v, list):
        for i, v2 in enumerate(v):
            p2 = "{}[{}]".format(prefix, i)
            print_dict(v2, p2)
    else:
        print('{} = {}'.format(prefix, repr(v)))

在你的数据上,它会打印出来

代码语言:javascript
复制
data['xml']['config']['portstatus']['status'] = u'good'
data['xml']['config']['target'] = u'1'
data['xml']['port'] = u'11'

如果您需要它,也可以很容易地修改它来跟踪前缀作为键的元组,而不是字符串。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10756427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档