pprint dictionary on multiple lines
Categories:
Pretty Printing Python Dictionaries on Multiple Lines

Learn how to use Python's pprint
module to format dictionaries for enhanced readability, especially for complex or nested data structures.
When working with Python dictionaries, especially those with many keys, long values, or nested structures, the default print()
function can output a single, hard-to-read line. The pprint
module, short for 'pretty print', provides a way to format complex data structures, including dictionaries, into a more human-readable, multi-line format. This article will guide you through using pprint
effectively to improve the readability of your Python dictionary outputs.
The Challenge of Default Dictionary Printing
By default, Python's print()
function outputs dictionaries as a single line, which can quickly become unmanageable. This is particularly true for dictionaries containing many items, long string values, or nested dictionaries and lists. Debugging or simply understanding the structure of such an output can be a significant challenge.
my_dict = {
'name': 'Alice',
'age': 30,
'city': 'New York',
'occupation': 'Software Engineer',
'interests': ['programming', 'reading', 'hiking', 'cooking'],
'contact': {
'email': 'alice@example.com',
'phone': '123-456-7890'
}
}
print(my_dict)
Default output of a complex dictionary using print()
The output from the above code will be a single, long line, making it difficult to quickly grasp the dictionary's structure and content. This is where pprint
comes in handy.
Introducing Python's pprint
Module
The pprint
module offers a pprint()
function that formats the output of Python data structures, including dictionaries, lists, and tuples, in a way that is both visually appealing and easy to understand. It automatically handles indentation, line breaks, and alignment, making complex data structures much more digestible.
import pprint
my_dict = {
'name': 'Alice',
'age': 30,
'city': 'New York',
'occupation': 'Software Engineer',
'interests': ['programming', 'reading', 'hiking', 'cooking'],
'contact': {
'email': 'alice@example.com',
'phone': '123-456-7890'
}
}
pprint.pprint(my_dict)
Using pprint.pprint()
for a multi-line dictionary output
Notice how pprint.pprint()
automatically indents nested structures and places each key-value pair on a new line, significantly improving readability. You can also control the indentation and width of the output.
Customizing pprint
Output
The pprint.pprint()
function accepts several arguments to customize its output. The most commonly used are indent
and width
.
flowchart TD A[Start] --> B{Call pprint.pprint()} B --> C{Check 'indent' parameter} C -->|Yes| D[Use specified indentation] C -->|No| E[Use default indentation (1)] E --> F{Check 'width' parameter} D --> F F -->|Yes| G[Wrap lines at specified width] F -->|No| H[Use default width (80)] G --> I[Format dictionary for readability] H --> I I --> J[Output formatted dictionary] J --> K[End]
Flowchart illustrating pprint
customization logic
indent
: Specifies the number of spaces to indent each level. The default is 1.width
: Specifies the maximum desired width of the output. If a data structure cannot be formatted within this width,pprint
will attempt to break lines to fit, but it might exceed the width if necessary to avoid breaking tokens.depth
: Specifies the number of levels to recurse. Deeper levels will be represented by...
.
import pprint
my_dict = {
'name': 'Alice',
'age': 30,
'city': 'New York',
'occupation': 'Software Engineer',
'interests': ['programming', 'reading', 'hiking', 'cooking'],
'contact': {
'email': 'alice@example.com',
'phone': '123-456-7890'
}
}
print("\n--- Custom Indent (4 spaces) ---")
pprint.pprint(my_dict, indent=4)
print("\n--- Custom Width (40 characters) ---")
pprint.pprint(my_dict, width=40)
print("\n--- Limited Depth (1 level) ---")
pprint.pprint(my_dict, depth=1)
Customizing pprint
output with indent
, width
, and depth
pprint.pformat()
. This function returns the formatted string instead of printing it directly to stdout
.import pprint
my_dict = {'a': 1, 'b': 2, 'c': {'d': 3, 'e': 4}}
formatted_string = pprint.pformat(my_dict, indent=2)
print("\n--- Using pformat() ---")
print(formatted_string)
print(type(formatted_string))
Using pprint.pformat()
to get the formatted string