62
задан 5 June 2015 в 11:56

3 ответа

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 побочные эффекты. Например, если Вы просто захотите получить значение для ключа, который не является там, то он создаст новый список и возвратит его.

110
ответ дан 31 October 2019 в 13:41

там более изящный способ написать этот код?

Использование collections.defaultdict:

from collections import defaultdict

dates_dict = defaultdict(list)
for key, date in cur:
    dates_dict[key].append(date)
22
ответ дан 31 October 2019 в 13:41

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)
5
ответ дан 31 October 2019 в 13:41

Другие вопросы по тегам:

Похожие вопросы: