Appending to list in Python dictionary [duplicate] Appending to list in Python dictionary [duplicate] python-3.x python-3.x

Appending to list in Python dictionary [duplicate]


list.append returns None, since it is an in-place operation and you are assigning it back to dates_dict[key]. So, the next time when you do dates_dict.get(key, []).append you are actually doing None.append. That is why it is failing. Instead, you can simply do

dates_dict.setdefault(key, []).append(date)

But, we have collections.defaultdict for this purpose only. You can do something like this

from collections import defaultdictdates_dict = defaultdict(list)for key, date in cur:    dates_dict[key].append(date)

This will create a new list object, if the key is not found in the dictionary.

Note: Since the defaultdict will create a new list if the key is not found in the dictionary, this will have unintented side-effects. For example, if you simply want to retrieve a value for the key, which is not there, it will create a new list and return it.


Is there a more elegant way to write this code?

Use collections.defaultdict:

from collections import defaultdictdates_dict = defaultdict(list)for key, date in cur:    dates_dict[key].append(date)


dates_dict[key] = dates_dict.get(key, []).append(date) sets dates_dict[key] to None as list.append returns None.

In [5]: l = [1,2,3]In [6]: var = l.append(3)In [7]: print varNone

You should use collections.defaultdict

import collectionsdates_dict = collections.defaultdict(list)