из коллекций импортировать defaultdict - PullRequest
0 голосов
/ 30 мая 2020

почему, когда я не устанавливаю значение по умолчанию of defaultdict равным нулю (int) , моя программа ниже не дает мне результатов:

>>> doc
'A wonderful serenity has taken possession of my entire soul, like these sweet mornings of spring which I enjoy with my whole heart. I am alone, and feel the charm of existence in this spot, which was created for the bliss of souls like mine. I am so happy'
>>> some = defaultdict()
>>> for i in doc.split():
...  some[i] = some[i]+1
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
KeyError: 'A'
>>> some
defaultdict(None, {})
>>> i
'A'

но он работает со значением по умолчанию

>>> some = defaultdict(int)
>>> for i in doc.split():
...  some[i] = some[i]+1
...
>>> some
defaultdict(<class 'int'>, {'A': 1, 'wonderful': 1, 'serenity': 1, 'has': 1, 'taken': 1, 'possession': 1, 'of': 4, 'my': 2, 'entire': 1, 'soul,': 1, 'like': 2, 'these': 1, 'sweet': 1, 'mornings': 1, 'spring': 1, 'which': 2, 'I': 3, 'enjoy': 1, 'with': 1, 'whole': 1, 'heart.': 1, 'am': 2, 'alone,': 1, 'and': 1, 'feel': 1, 'the': 2, 'charm': 1, 'existence': 1, 'in': 1, 'this': 1, 'spot,': 1, 'was': 1, 'created': 1, 'for': 1, 'bliss': 1, 'souls': 1, 'mine.': 1, 'so': 1, 'happy': 1})
>>>

Не могли бы вы сказать, почему это работает именно так?

1 Ответ

1 голос
/ 30 мая 2020

Как сказано в документации:

Первый аргумент предоставляет начальное значение для атрибута default_factory; по умолчанию None. Все оставшиеся аргументы обрабатываются так же, как если бы они были переданы конструктору dict, включая аргументы ключевого слова. установлен на None См. вывод:

some = defaultdict()
print(some)    # defaultdict(None, {}) 

И когда значение установлено на None, вы не можете выполнить: some[i] = some[i]+1.
Таким образом, вы должны установить значение по умолчанию значение int явно: some = defaultdict(int)

...