>>> helium = periodic_table.setdefault('Helium', 947)
>>> helium
2
>>> periodic_table
{'Helium': 2, 'Carbon': 12, 'Hydrogen': 1}
Функция defaultdict() похожа на предыдущую, но она определяет значение
по умолчанию для новых ключей заранее, при создании словаря. В этом примере мы
передаем функцию int, которая будет вызываться как int(), и возвращаем значе-
ние 0:
>>> from collections import defaultdict
>>> periodic_table = defaultdict(int)
Стандартная библиотека Python
149
Теперь любое отсутствующее значение будет заменяться целым числом (int) 0:
>>> periodic_table['Hydrogen'] = 1
>>> periodic_table['Lead']
0
>>> periodic_table
defaultdict(<class 'int'>, {'Lead': 0, 'Hydrogen': 1})
Аргументом defaultdict() является функция, возвращающая значение, которое
будет присвоено отсутствующему ключу. В следующем примере функция no_idea()
будет вызываться всякий раз, когда нужно вернуть значение:
>>> from collections import defaultdict
>>>
>>> def no_idea():
... return 'Huh?'
...
>>> bestiary = defaultdict(no_idea)
>>> bestiary['A'] = 'Abominable Snowman'
>>> bestiary['B'] = 'Basilisk'
>>> bestiary['A']
'Abominable Snowman'
>>> bestiary['B']
'Basilisk'
>>> bestiary['C']
'Huh?'
Вы можете использовать функции int(), list() или dict(), чтобы возвращать
пустые значения по умолчанию: int() возвращает 0, list() возвращает пустой спи-
сок ([]) и dict() возвращает пустой словарь ({}). Если вы опустите аргумент, ис-
ходное значение нового ключа будет равно None.
Кстати, вы можете использовать lambda для того, чтобы определить функцию по
умолчанию изнутри вызова:
>>> bestiary = defaultdict(lambda: 'Huh?')
>>> bestiary['E']
'Huh?'
Применение int — это один из способов создать ваш собственный при-
лавок:
>>> from collections import defaultdict
>>> food_counter = defaultdict(int)