[英]Printing dictionaries (JSON) human readable
可以说我有一个像这样的(嵌套)字典(请注意list-values):
dic = {'level1':
{'level2':(1, 2),
'level3':
[
{'level4': (1, 2)},
{'level5': (1, 2)}
]
}
}
我正在寻找一种打印此字典的正确方法,我正在使用json
来做到这一点:
import json
print json.dumps(dic, indent=4)
上面的代码为我提供了以下输出:
{
"level1": {
"level2": [
1,
2
],
"level3": [
{
"level4": [
1,
2
]
},
{
"level5": [
1,
2
]
}
]
}
}
尽管上面的输出相当不错,但是仍然很难阅读,特别是在有很多级别和更长名称的情况下。 我也尝试过yaml
import yaml
print yaml.dump(dic)
给出以下看起来很奇怪的内容:
level1:
level2: !!python/tuple [1, 2]
level3:
- level4: !!python/tuple [1, 2]
- level5: !!python/tuple [1, 2]
是否有其他库可以产生更好的转储,我认为以下输出更易于阅读:
"level1"
|---"level2": 1, 2
|---"level3":
|---"level4": 1, 2
|---"level5": 1, 2
我相信上面的内容更容易阅读,并且可能有python库可以做到这一点。
这是根据活动状态代码示例改编的。 不能说漂亮,但可以引导您朝正确的方向前进:
myDict = {'level1':
{'level2':(1, 2),
'level3':
[
{'level4': (1, 2)},
{'level5': (1, 2)},
],
'level6': [1,2,3],
'level7':{'level8': (1,2), 'level9': (1,2)}
}
}
def prettyPrint(dictionary, ident = '', braces=1):
for key, value in dictionary.iteritems():
if isinstance(value, dict):
print '%s%s%s%s' % (ident, braces*'[', key, braces*']')
prettyPrint(value, ident+' ', braces+1)
elif isinstance(value, list):
ndict=0
for v in value:
if isinstance(v, dict):
ndict += 1
if ndict:
print '%s%s' % (ident, key)
for e in value:
if isinstance(e, dict):
prettyPrint(e, ident+' ', braces+1)
else:
print ident+'%s : %s' %(key, e)
else:
print ident+'%s : %s' %(key, value)
else:
print ident+'%s : %s' %(key, value)
prettyPrint(myDict)
[level1]
level2 : (1, 2)
level3
level4 : (1, 2)
level5 : (1, 2)
level6 : [1, 2, 3]
[[level7]]
level8 : (1, 2)
level9 : (1, 2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.