#Day7 - Dictionaries in Python
Rahul Banerjee
Posted on March 28, 2021
Today we will be talking about some advanced concepts of Dictionaries in Python. Dictionaries are essentially a Hashmap in Python and have a lookup time of O(1)
The dictionary dict_10 has 10 elements and the dictionary has dict_100000 has 100000 elements. Both the if statements check if an element is a member of the dictionary but irrespective of the size of the dictionary size, the time taken is almost the same (It's in nanoseconds)
Keys
An object can be a key of a dictionary if and only if it's hashable. As I discussed in my previous article (Day 5), only String, Boolean, Integer, Float, Tuples, and frozen Sets are hashable while lists, sets, and dictionaries are not hashable.
Accessing an element
Although you can use [ ] operator, it is safer to use the get() function. If the key is not present in the dictionary, it returns a None instead of raising a Key Error. Additionally, you can also pass the default value. In the last print statement, a default empty string is returned if the key is not found.
Inserting a key-value pair where the value is a list or dictionary
In line 2, since key2 doesn't exist the second line would give an error. To avoid the error, we can use the setdefault() function. If the key doesn't exist, it creates a key-value pair with the default value specified. This can also be used when we have a dictionary as a value.
Merging Dictionaries
The update method merges two dictionaries.
In the above case, the key-value pairs of dict2 are added to dict1. If there are any common keys present, the value is updated. In the above case, key1 is in both dictionaries. As a result of the update, the value of key1 is changed to Value 3
Below is the output of the print statement
{'key1': 'Value 3', 'key2': 'Value 2'}
In the above case, the value of key1 in dict2 changes to Value 1. Below is the output of the statement
{'key1': 'Value 1', 'key2': 'Value 2'}
Copying Dictionaries
Copying using the assignment operator creates a shallow copy, i.e it actually creates and assigns a reference to the dictionary. Any changes made in dict2 are also reflected in dict1. We can use the id() function to check the memory address of the dictionaries, both of them have the same address. As a result, any changes made in dict1 or dict2 are reflected in both dictionaries.
In the above case, we are creating a deep copy, i.e the values are copied. Therefore any changes in dict2 are not shown in dict1. It is always safer to do a deepcopy to avoid unintentional updates to the original dictionary
Summary
- A dictionary has a lookup time of O(1)
- It is safer to use the get() method when accessing elements in a dictionary
- Use setdefault() when you want to store a create a dictionary of lists or a dictionary of dictionaries
- Use deepcopy to copy dictionary to avoid unintentional updates to the original dictionary
Posted on March 28, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.