如何美化打印嵌套字典?
我想知道在Python中怎么把一个深度大约为4的字典美观地打印出来。我试过用pprint()
来打印,但效果不好:
import pprint
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(mydict)
我只是想要每一层嵌套都有一个缩进("\t"
),这样我能得到像下面这样的格式:
key1
value1
value2
key2
value1
value2
等等。
我该怎么做呢?
30 个回答
116
你可以试试 YAML,通过 PyYAML 来使用。它的输出结果可以进行细致调整。我建议你可以从下面的内容开始:
print(yaml.dump(data, allow_unicode=True, default_flow_style=False))
这个结果 非常 易读;如果需要的话,也可以再转回Python。
编辑:
示例:
>>> import yaml
>>> data = {'a':2, 'b':{'x':3, 'y':{'t1': 4, 't2':5}}}
>>> print(yaml.dump(data, default_flow_style=False))
a: 2
b:
x: 3
y:
t1: 4
t2: 5
861
我首先想到的是,JSON序列化器在处理嵌套字典方面应该很不错,所以我打算偷个懒,直接用它:
>>> import json
>>> print(json.dumps({'a':2, 'b':{'x':3, 'y':{'t1': 4, 't2':5}}},
... sort_keys=True, indent=4))
{
"a": 2,
"b": {
"x": 3,
"y": {
"t1": 4,
"t2": 5
}
}
}
222
我不太确定你想要的格式具体是什么样的,不过你可以先试试写一个这样的函数:
def pretty(d, indent=0):
for key, value in d.items():
print('\t' * indent + str(key))
if isinstance(value, dict):
pretty(value, indent+1)
else:
print('\t' * (indent+1) + str(value))