如何美化打印嵌套字典?

562 投票
30 回答
651782 浏览
提问于 2025-04-16 01:10

我想知道在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))

撰写回答