Словари в Python
Ключи и значения: безопасный доступ, обход и подсчёт частот.
Словарь: доступ к значению без KeyError
stock = {'coffee': 12, 'tea': 5}
stock['coffee'] # 12
stock.get('juice') # None
stock.get('juice', 0) # 0 Квадратные скобки падают с KeyError, когда ключа нет. get возвращает None или значение по умолчанию вторым аргументом — удобно для счётчиков.
Словарь: добавить, изменить, удалить
stock = {'coffee': 12}
stock['tea'] = 5 # add
stock['coffee'] = 10 # change
del stock['tea']
qty = stock.pop('juice', 0) # 0, no KeyError Присваивание по новому ключу добавляет пару, по существующему — перезаписывает. del падает на отсутствующем ключе, pop со вторым аргументом — нет.
Перебор словаря: keys, values, items
stock = {'coffee': 12, 'tea': 5}
for name in stock: # keys
print(name)
for name, qty in stock.items():
print(name, qty) # coffee 12, tea 5 for по словарю идёт по ключам; пары «ключ, значение» даёт items(). Только значения — values().
Ключ в словаре: in
stock = {'coffee': 12, 'tea': 5}
'coffee' in stock # True
12 in stock # False, values do not count
if 'tea' in stock:
stock['tea'] += 1 in проверяет только ключи — значение 12 словарь «не видит». Паттерн if key in dict страхует доступ по скобкам от KeyError.
Словарное включение
prices = {'coffee': 199, 'tea': 99}
sale = {n: p // 2 for n, p in prices.items()}
# {'coffee': 99, 'tea': 49}
cheap = {n: p for n, p in prices.items() if p < 150}
# {'tea': 99} Как списковое включение, но с парой ключ: значение слева. Удобно, например, перевернуть словарь: {v: k for k, v in d.items()}.