DEV Community

Rakesh Gautam
Rakesh Gautam

Posted on • Originally published at

Using Defaultdict in Python

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'])
>>> print(mydict['last_name'])
Enter fullscreen mode Exit fullscreen mode

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'
Enter fullscreen mode Exit fullscreen mode

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'])
>>> print(def_dict['middle_name'])

Enter fullscreen mode Exit fullscreen mode

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'])

Enter fullscreen mode Exit fullscreen mode

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)