Python: list() as default value for dictionary Python: list() as default value for dictionary python python

Python: list() as default value for dictionary


The best method is to use collections.defaultdict with a list default:

from collections import defaultdictdct = defaultdict(list)

Then just use:

dct[key].append(some_value)

and the dictionary will create a new list for you if the key is not yet in the mapping. collections.defaultdict is a subclass of dict and otherwise behaves just like a normal dict object.

When using a standard dict, dict.setdefault() correctly sets dct[key] for you to the default, so that version should have worked just fine. You can chain that call with .append():

>>> dct = {}>>> dct.setdefault('foo', []).append('bar')  # returns None!>>> dct{'foo': ['bar']}

However, by using dct[key] = dct.get(...).append() you replace the value for dct[key] with the output of .append(), which is None.


dict.setdefault(key, []).append(some_value)