Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 110

ющему ключу, будет возвращено оригинальное значение и ничто не изменится:

>>> 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)