list.append
возвраты None
, так как это - оперативная операция и Вы присваиваете его назад dates_dict[key]
. Так, в следующий раз, когда Вы делаете dates_dict.get(key, []).append
, Вы на самом деле делаете None.append
. Именно поэтому это перестало работать. Вместо этого можно просто сделать
dates_dict.setdefault(key, []).append(date)
, Но, мы имеем collections.defaultdict
с этой целью только. Можно сделать что-то вроде этого
from collections import defaultdict
dates_dict = defaultdict(list)
for key, date in cur:
dates_dict[key].append(date)
, Это создаст новый объект списка, если эти key
не будет найден в словаре.
Примечание: Начиная с эти defaultdict
создаст новый список, если ключ не будет найден в словаре, то это будет иметь unintented побочные эффекты. Например, если Вы просто захотите получить значение для ключа, который не является там, то он создаст новый список и возвратит его.
там более изящный способ написать этот код?
Использование collections.defaultdict:
from collections import defaultdict
dates_dict = defaultdict(list)
for key, date in cur:
dates_dict[key].append(date)
dates_dict[key] = dates_dict.get(key, []).append(date)
наборы dates_dict[key]
к None
как list.append
возвраты None
.
In [5]: l = [1,2,3]
In [6]: var = l.append(3)
In [7]: print var
None
необходимо использовать collections.defaultdict
import collections
dates_dict = collections.defaultdict(list)