How to pretty print nested dictionaries? How to pretty print nested dictionaries? python python

How to pretty print nested dictionaries?


My first thought was that the JSON serializer is probably pretty good at nested dictionaries, so I'd cheat and use that:

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


I'm not sure how exactly you want the formatting to look like, but you could start with a function like this:

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


You could try YAML via PyYAML. Its output can be fine-tuned. I'd suggest starting with the following:

print yaml.dump(data, allow_unicode=True, default_flow_style=False)

The result is very readable; it can be also parsed back to Python if needed.

Edit:

Example:

>>> import yaml>>> data = {'a':2, 'b':{'x':3, 'y':{'t1': 4, 't2':5}}}>>> print yaml.dump(data, default_flow_style=False)a: 2b:  x: 3  y:    t1: 4    t2: 5