Cross posted from Rakesh's Blog
Dictionaries are a great convenient way to store and retrieve data by name in python.
>>> mydict = { 'first_name' : 'Rakesh', 'last_name': 'Gautam' }
>>> print(mydict['first_name'])
Rakesh
>>> print(mydict['last_name'])
Gautam
But if you try to get an item with a key that is not currently in the dictionary, Regular Python dictionary raises a KeyError exception.
>>> print(mydict['middle_name'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'middle_name'
While this is easy to handle manually, the defaultdict simplifies this kind of task.
DefaultDict works exactly like a regular python Dict, but it is initialized with a function, that takes no argument and provides a default value for a non-existent key.
DefaultDict never raises a KeyError exception. If any key does not exist, its value gets returned by the DefaultDict.
DefaultDict is part of the python's collections package.
>>> from collections import defaultdict
>>> mydict = { 'first_name' : 'Rakesh', 'last_name': 'Gautam' }
>>> def_dict = defaultdict(str, mydict)
>>> print(def_dict['first_name'])
Rakesh
>>> print(def_dict['middle_name'])
>>>
Here, this didn't raise any KeyError exception because we passed str as an argument to the defaultdict.
def_dict returns "" (default value for string) here if we pass a non-existant key as an argument.
>>> my_dict = {'a' : 10, 'b': 20, 'c':30}
>>> dict_2 = defaultdict(lambda : 0, my_dict)
>>> print(dict_2['x'])
0
Here, we passed lambda : 0 as a function to defaultdict, and this will return 0, whenever we ask for a non-existent key.
We can use any function that takes no argument, in the defaultdict. If someone attempts to access a key to which no value has been assigned, that function will be called (without arguments) and its return value is used as the default value for the key.
Top comments (0)