In this tutoria, you’ll learn how to use Python to pretty print a dict (dictionary). You’ll learn how to use the pprint
library as well as the json
library to do this. You’ll also learn how to pretty print nested dictionaries in Python. Finally, you’ll learn how to save a pretty printed dict in Python to a file.
Dictionaries are a key component of working with data in Python, including with data loaded from the internet. Many APIs return data in JSON format, which is very similar to the formatting of Python dictionaries. Dictionaries provide incredibly helpful ways in which you can store and retrieve data. However, they can be a bit tricky to read. Because of this, it’s often helpful to be able to print out your dictionaries in a more human-readable format. Without further ado, let’s take a look at what you’ll learn!
The Quick Answer: Use the json library
Table of Contents
What are Python Dictionaries?
Python dictionaries are data structures that use key:value
pairs to hold and retrieve data. Keys are unique, in Python dictionaries, and must be made up of immutable data types (such as strings or integers), while values can be made up of anything, including additional dictionaries.
Let’s take a look at what a dictionary looks like in Python:
sample_dict = {
'age': 31,
'gender': 'male',
'books': ['Harry Potter', 'Lord of the Rings']
}
We can retrieve a value if we know a dictionary’s key. For example, if we wanted to retrieve the value for age
, we could simply write: print(sample_dict.get('age'))
, which would return 31
.
Now that we have an understanding of what Python dictionaries are, let’s take a look at how to pretty print them.
Need to check if a key exists in a Python dictionary? Check out this tutorial, which teaches you five different ways of seeing if a key exists in a Python dictionary, including how to return a default value.
Pretty Print a Dict in Python with pprint
Python comes with a built-in library called pprint
, which stands for pretty-print. Using this library, we can print out more nicely formatted data structures, including dictionaries.
The pprint
library allows us to specify a number of different parameters, including the following:
indent
: the number of spaces to indent each line, where the default value is1
width
: the maximum caharacters that are allowed on a single line, where the default isNone
(meaning, the maximum)depth
: the number of levels to show while using nested data types, where the default isNone
(meaning that all levels of depth are shown)stream
: used to specify an output stream and can be used to save to a filecompact
: If set toTrue
, the values will be printed on single lines, to a certain widthsort_dicts
: ifTrue
, it prints the key-value pairs according to an alphabetical order of the keys. Defaults toTrue
Let’s load a dictionary and see how we can pretty print it using Python:
# Pretty Print a Dictionary using pprint
import pprint
sample_dict = {'name': 'Nik', 'age': 31, 'gender': 'male', 'books': ['Harry Potter', 'Lord of the Rings']}
pprint.pprint(sample_dict)
# Returns:
# {'name': 'Nik',
# 'age': 31,
# 'books': ['Harry Potter', 'Lord of the Rings'],
# 'gender': 'male'}
In the next section, you’ll learn how to use the JSON library to pretty print a Python dict.
Want to learn more about Python list comprehensions? Check out this in-depth tutorial that covers off everything you need to know, with hands-on examples. More of a visual learner, check out my YouTube tutorial here.
Pretty Print a Dict in Python with JSON
As mentioned earlier, Python dictionaries carry a lot of similar characteristics with JSON objects. Because of this, we can use the JSON library to return a formatted JSON string.
Built into the json
library is a function called .dumps()
, which dumps a string object. Let’s take a look at what the .dumps()
function looks like and what parameters it takes:
sort_keys
which sorts a dictionary’s keys and defaults toFalse
indent
: which lets Python know how many spaces to indent levels by
Let’s use the same dictionary as above and pretty print it using Python’s json
library:
# Pretty Print a Dictionary using json
import json
sample_dict = {'Nik':{'age': 31, 'gender': 'male', 'books': ['Harry Potter', 'Lord of the Rings']}, 'Joe': {'age': 40, 'gender': 'male', 'books':['Lord of the Flies']}}
pretty = json.dumps(sample_dict, indent=4)
print(pretty)
# Returns:
# {
# "name": "Nik",
# "age": 31,
# "gender": "male",
# "books": [
# "Harry Potter",
# "Lord of the Rings"
# ]
# }
We can see here that this returns a very similar printed dictionary, with a key difference: the list is also printed on seperate lines, making it easier to read. This, of course, is a much prettier way to print your dictionaries.
In the next section, you’ll learn how to pretty print a nested dictionary in Python.
Want to learn how to pretty print a JSON file using Python? Learn three different methods to accomplish this using this in-depth tutorial here.
Pretty Print a Nested Dictionary in Python
In many cases, your dictionaries will be complex. You may even encounter dictionaries that contain other dictionaries. For example, you may have a dictionary that contains information on different people. Each key of the top-level dictionary will represent a person’s name and the value will be a different dictionary that will describe key attributes of a person.
Because of the complexity of dictionaries you may encounter, to better understand their structure, you may wish to print them out a way that more appropriately describes their structure.
Using the json
library, this is actually very easy! It actually works in the same way as printing a normal dictionary. Let’s take a look:
# Pretty Print a Nested Dictionary using json
import json
sample_dict = {'Nik':{'age': 31, 'gender': 'male', 'books': ['Harry Potter', 'Lord of the Rings']}, 'Joe': {'age': 40, 'gender': 'male', 'books':['Lord of the Flies']}}
pretty = json.dumps(sample_dict, indent=4, sort_keys=True)
print(pretty)
# Returns:
# {
# "Joe": {
# "age": 40,
# "books": [
# "Lord of the Flies"
# ],
# "gender": "male"
# },
# "Nik": {
# "age": 31,
# "books": [
# "Harry Potter",
# "Lord of the Rings"
# ],
# "gender": "male"
# }
# }
In the next section, you’ll learn how to save a pretty printed dictionary to a file.
Check out some other Python tutorials on datagy.io, including our complete guide to styling Pandas and our comprehensive overview of Pivot Tables in Pandas!
Save a Pretty Printed Dictionary to a File
Finally, let’s take a look at how to save a pretty printed dict to a file. We can use the pprint
library to accomplish this, with the help of a context manager.
Let’s see how this can be done using Python:
# Save a pretty printed dict to a file
import pprint
sample_dict = {'Nik':{'age': 31, 'gender': 'male', 'books': ['Harry Potter', 'Lord of the Rings']}, 'Joe': {'age': 40, 'gender': 'male', 'books':['Lord of the Flies']}}
with open('path_to_file', 'w') as file_name:
pprint.pprint(sample_dict, file_name)
We use a context manager using the open()
function to link to a particular file where we want to save our dictionary and then use the 'w'
parameter to say we want to write to the file. We then pass the dictionary and this file_name into the pprint()
function to save it to a file.
Want to learn more about Python for-loops? Check out my in-depth tutorial that takes your from beginner to advanced for-loops user! Want to watch a video instead? Check out my YouTube tutorial here.
Conclusion
In this post, you learned how to use Python to pretty print a dict. You learned how to do this using the pprint
and json
libraries, and learned the ways in which these two approaches differ. You also learned how to pretty print nested dictionaries in Python as well as how to save pretty printed dictionaries to a file.
To learn more about the pprint
library, check out the official documentation here.
Awesome! Thank you!
Thanks Amin! 🙂
thanks!
A nice alternative is the inspect() function from Python rich https://rich.readthedocs.io/en/stable/introduction.html?highlight=inspect#rich-inspect
That’s awesome! Thanks for sharing, Anderson!