16 Intermediate-Level Python Dictionary Tips, Tricks and Shortcuts

Posted on August 06, 2020 in Tips & Tricks

16 Intermediate-Level Python Dictionary Tips, Tricks and Shortcuts

Dictionaries are the heart and soul of Python. Here are the most essential tips and tricks for you to use with dictionaries.

Image Credit: https://www.pexels.com/photo/woman-typing-on-macbook-pro-1181281/

16 Intermediate-Level Python Dictionary Tips, Tricks and Shortcuts

Dictionaries are the heart and soul of Python. Here are the most essential tips and tricks for you to use with dictionaries.

The following code snippets are available on Github as Gists, and were tested with Python 3.7. This is a companion article to:

1. Print All the Key: Value Pairs in a Nested Dictionary

This is a recursive solution to printing all k:v pairs in a dictionary. 
It handles the presence of lists, sets and tuples in a value.

This is the output produced:

2. Sort a Dictionary

Since Python3.6, dictionaries retain insertion order by default. However, dictionaries don’t support sorting.

It is possible to get an Iteratable sequence of the dictionary’s k:v pairs as a sequence of tuples. And then convert that list of sorted tuples back to a dictionary — the insertion order is retained.

3. Merge Two Dictionaries

From python version 3.9, the merge operator | is available for dictionaries. Until then, you can use the shallow copy merge method.

4. Make a Dictionary from Two Lists

We can zip the two lists to form a sequence of tuples, and pass this to the dict() constructor.

5. Get all Items in a Nested Dictionary by Key

Here we’re using recursion again. 
Note: there are good Python libraries available if you prefer to use path expressions. See: JMES Path.

6. Get all Items in a Nested Dictionary by Value

Unsurprisingly, this is very similar to the previous example.
Note the use of yield to create an iterator. Line 32 coerces all of the individual yield executions into a list.

7. Create a Dictionary using Dictionary Comprehension

Dictionary comprehension uses the {key: value} construct with a for loop over a sequence.

8. Use Default Values for New Items

The defaultdict is very useful when you want to append values to an existing key, instead of overwriting it.
Normally, line #9 would give an error because the value in this key would not be a list, it would be None. so we wouldn’t be able to append.

9. Convert List of Tuples to Dictionary

Again using a defaultdict, this time the default value is a dictionary.

10. Create a Dictionary from a CSV File with Column Headers

Let’s not reinvent the wheel, and instead use the CSV module.

11. Delete an Item from a Dictionary

Use the pop() method to delete a dictionary item and retrieve its value.

12. Make a Deep Copy of a Dictionary

Use the deepcopy function in the copy module to make a true copy of a dictionary containing mutable objects, such as a list.

13. Reverse Keys and Values

Maybe you will need to do this one day!
This solution uses a dictionary comprehension.

14. Save Multiple Dictionaries to a File

As an alternative to using pickle to save one object to one file, here we are using shelve to store multiple objects in a file.

15. Convert from Dictionary to JSON

Nothing could be simpler! We saw some simple examples at #6 and #10.
Unless your dictionary object contains user-defined classes, datetime objects, set or other Python objects…

In this case, we will subclass the JSONEncoder object and handle our special cases differently.

On line #12 I’m using “duck typing”. The idea is to see if the object behaves like an iterable sequence, if so then convert it to a list. If the object doesn’t behave like an iterable, then an exception is raised (which we ignore on line #16).

16. Delete Multiple Items from a Dictionary During Iteration

In python3, the items() method returns an iterator. Trying to delete an item results in a RuntimeError.

We can avoid the RuntimeError by temporarily making a note of the keys all the items we mark for deletion.

This example simply removes all items whose value is an even number.

I hope you enjoyed this! Please be sure to leave a comment if you find any mistakes!