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。有什么帮助吗?
编辑
这个怎么样?它仍然只打印一件东西。
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'}
发布于 2012-05-25 22:47:57
正如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))
发布于 2012-05-25 23:22:21
另一种迭代解决方案:
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))
发布于 2016-02-13 20:55:59
我写的版本略有不同,它跟踪了到达那里的过程中的关键字
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)))
在你的数据上,它会打印出来
data['xml']['config']['portstatus']['status'] = u'good'
data['xml']['config']['target'] = u'1'
data['xml']['port'] = u'11'
如果您需要它,也可以很容易地修改它来跟踪前缀作为键的元组,而不是字符串。
https://stackoverflow.com/questions/10756427
复制相似问题