printing - How to print a dictionary line by line in Python?

ID : 20360

viewed : 9

Tags : pythonprintingdictionarypython

Top 5 Answer for printing - How to print a dictionary line by line in Python?

vote vote

100

for x in cars:     print (x)     for y in cars[x]:         print (y,':',cars[x][y]) 

output:

A color : 2 speed : 70 B color : 3 speed : 60 
vote vote

83

You could use the json module for this. The dumps function in this module converts a JSON object into a properly formatted string which you can then print.

import json  cars = {'A':{'speed':70, 'color':2},         'B':{'speed':60, 'color':3}}  print(json.dumps(cars, indent = 4)) 

The output looks like

{     "A": {         "color": 2,         "speed": 70     },     "B": {         "color": 3,         "speed": 60     } } 

The documentation also specifies a bunch of useful options for this method.

vote vote

76

A more generalized solution that handles arbitrarily-deeply nested dicts and lists would be:

def dumpclean(obj):     if isinstance(obj, dict):         for k, v in obj.items():             if hasattr(v, '__iter__'):                 print k                 dumpclean(v)             else:                 print '%s : %s' % (k, v)     elif isinstance(obj, list):         for v in obj:             if hasattr(v, '__iter__'):                 dumpclean(v)             else:                 print v     else:         print obj 

This produces the output:

A color : 2 speed : 70 B color : 3 speed : 60 

I ran into a similar need and developed a more robust function as an exercise for myself. I'm including it here in case it can be of value to another. In running nosetest, I also found it helpful to be able to specify the output stream in the call so that sys.stderr could be used instead.

import sys  def dump(obj, nested_level=0, output=sys.stdout):     spacing = '   '     if isinstance(obj, dict):         print >> output, '%s{' % ((nested_level) * spacing)         for k, v in obj.items():             if hasattr(v, '__iter__'):                 print >> output, '%s%s:' % ((nested_level + 1) * spacing, k)                 dump(v, nested_level + 1, output)             else:                 print >> output, '%s%s: %s' % ((nested_level + 1) * spacing, k, v)         print >> output, '%s}' % (nested_level * spacing)     elif isinstance(obj, list):         print >> output, '%s[' % ((nested_level) * spacing)         for v in obj:             if hasattr(v, '__iter__'):                 dump(v, nested_level + 1, output)             else:                 print >> output, '%s%s' % ((nested_level + 1) * spacing, v)         print >> output, '%s]' % ((nested_level) * spacing)     else:         print >> output, '%s%s' % (nested_level * spacing, obj) 

Using this function, the OP's output looks like this:

{    A:    {       color: 2       speed: 70    }    B:    {       color: 3       speed: 60    } } 

which I personally found to be more useful and descriptive.

Given the slightly less-trivial example of:

{"test": [{1:3}], "test2":[(1,2),(3,4)],"test3": {(1,2):['abc', 'def', 'ghi'],(4,5):'def'}} 

The OP's requested solution yields this:

test 1 : 3 test3 (1, 2) abc def ghi (4, 5) : def test2 (1, 2) (3, 4) 

whereas the 'enhanced' version yields this:

{    test:    [       {          1: 3       }    ]    test3:    {       (1, 2):       [          abc          def          ghi       ]       (4, 5): def    }    test2:    [       (1, 2)       (3, 4)    ] } 

I hope this provides some value to the next person looking for this type of functionality.

vote vote

60

pprint.pprint() is a good tool for this job:

>>> import pprint >>> cars = {'A':{'speed':70, ...         'color':2}, ...         'B':{'speed':60, ...         'color':3}} >>> pprint.pprint(cars, width=1) {'A': {'color': 2,        'speed': 70},  'B': {'color': 3,        'speed': 60}} 
vote vote

60

You have a nested structure, so you need to format the nested dictionary too:

for key, car in cars.items():     print(key)     for attribute, value in car.items():         print('{} : {}'.format(attribute, value)) 

This prints:

A color : 2 speed : 70 B color : 3 speed : 60 

Top 3 video Explaining printing - How to print a dictionary line by line in Python?

Related QUESTION?