如何漂亮地打印嵌套字典?

2024-04-26 19:24:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我怎样才能用Python打印出深度为~4的字典呢?我试着用pprint()进行漂亮的打印,但没有成功:

import pprint 
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(mydict)

我只希望每个嵌套都有一个缩进("\t"),以便得到如下结果:

key1
    value1
    value2
    key2
       value1
       value2

等等

我该怎么做?


Tags: import字典prettyprintermydictpppprintkey2key1
3条回答

我不确定您到底希望格式如何,但可以从这样的函数开始:

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))

您可以通过PyYAML尝试YAML。它的输出可以微调。我建议从以下几点开始:

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

我的第一个想法是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
        }
    }
}

相关问题 更多 >