Python: Pretty Print a Dict (Dictionary) – 4 Ways

Python Pretty Print a Dictionary Cover Image

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

Quick Answer - Python Pretty Print a Dictionary

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:

  1. indent: the number of spaces to indent each line, where the default value is 1
  2. width: the maximum caharacters that are allowed on a single line, where the default is None (meaning, the maximum)
  3. depth: the number of levels to show while using nested data types, where the default is None (meaning that all levels of depth are shown)
  4. stream: used to specify an output stream and can be used to save to a file
  5. compact: If set to True, the values will be printed on single lines, to a certain width
  6. sort_dicts: if True, it prints the key-value pairs according to an alphabetical order of the keys. Defaults to True

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:

  1. sort_keys which sorts a dictionary’s keys and defaults to False
  2. 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, 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.