строка документация для collections.defaultdict
довольно запутанный первого прочтение:
defaultdict (default_factory [, ...]) -> ДИКТ с заводом по умолчанию
завод по умолчанию вызывается без аргументов производят новое значение , когда ключа нет, в getitem. Значение defaultdict сравнивает , равное dict с теми же элементами. Все остальные аргументы: обрабатываются так же, как если бы они были переданы конструктору dict, , включая аргументы ключевых слов.
Все это пытается сказать, что «значение» по умолчанию должен быть функцией, и что эта функция будет вызвана без аргументов, когда это необходимо (например, когда нормальная dict
поднимет KeyError
). В docstring ссылается на эту функцию как default_factory
.
В бит с [, ...]
указано, что вы можете дополнительно передать объект (или ключевые слова) для использования в качестве начального словаря defaultdict
. Таким образом:
In [26]: x = defaultdict(lambda: 0, a=1, b=2)
In [28]: dict(x)
Out[28]: {'a': 1, 'b': 2}
In [29]: x['c'] # This would normally raise a `KeyError`
Out[29]: 0
In [30]: dict(x) # But here it just adds a new key!
Out[30]: {'a': 1, 'b': 2, 'c': 0}
Любая функция, которая возвращает ноль при вызове с не может быть использована без аргументов:
In [31]: int()
Out[31]: 0
Таким образом, согласно the counting example from the docs вы можете создать defaultdict
со значением по умолчанию нуля с:
defaultdict(int)
Также обратите внимание на то, что здесь также рассматривается множество других вопросов: пример 'defaultdict (int) приведен в [документации] (https://docs.python.org/2/library /collections.html#defaultdict-examples)*, поэтому я действительно не уверен, что это добавляет ценность. – jonrsharpe
@jonrsharpe Это упоминание в документах является более мощным аргументом для закрытия, чем дублированный вопрос, с которым вы связались, хотя это является дополнением к этому, и не имеет достаточной возможности для Google. У меня есть тенденция делать эти вопросы в стиле Q & A всякий раз, когда docstring непрозрачна, и быстрый Google не мгновенно приносит радость! – LondonRob