Словари в 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()}.

Что дальше