Статья Автор: Деникина Н.В., Деникин А.В.

Словари. Шпаргалка

Словари Python · шпаргалка

задание №26 ЕГЭ

Создание и заполнение

# пустой словарь
d = {}

# сразу с данными
d = {'a': 1, 'b': 2}

# добавить / изменить
d['c'] = 3

# +1 к счётчику
d[k] = d.get(k, 0) + 1
# из файла — типичный шаблон
d = {}
for line in f[1:]:
    x, y = line.split()
    d[x] = d.get(x, 0) + 1

# или через setdefault
d.setdefault(x, []).append(y)

Перебор

for k in d:                  # только ключи
for k, v in d.items():      # ключ + значение  ← чаще всего нужно это
for v in d.values():        # только значения

Сортировка — все варианты

по значению

# от меньшего к большему
sorted(d.items(),
  key=lambda x: x[1])

# от большего к меньшему
sorted(d.items(),
  key=lambda x: x[1],
  reverse=True)

по ключу

# ключи — строки/числа
sorted(d.items(),
  key=lambda x: x[0])

# по убыванию ключа
sorted(d.items(),
  key=lambda x: x[0],
  reverse=True)
сначала значение, при равенстве — ключ
sorted(d.items(), key=lambda x: (x[1], x[0]))
# x[1] — первый критерий, x[0] — второй (тай-брейкер)

Чтобы один из критериев был «по убыванию», поставьте минус: (-x[1], x[0])

Получить максимум / минимум

# ключ с максимальным значением
max(d, key=d.get)                        # → 'b'

# пара (ключ, значение) с максимумом
max(d.items(), key=lambda x: x[1])     # → ('b', 5)

# топ-3
sorted(d.items(), key=lambda x: x[1], reverse=True)[:3]

defaultdict — словарь с значением по умолчанию

from collections import defaultdict

# простые случаи — готовые фабрики
d = defaultdict(int)    # → 0
d = defaultdict(list)   # → []
d = defaultdict(str)    # → ''

# своё начальное значение — лямбда
d = defaultdict(lambda: [0, 0, 0])
# ключа нет → создаётся автоматически
d['a'][1] += 5
# d['a'] == [0, 5, 0]

# вместо громоздкого:
if k not in d:
    d[k] = [0, 0, 0]
d[k][1] += 5

Лямбда нужна потому, что требуется функция, а не готовое значение — она вызывается заново для каждого нового ключа и создаёт отдельный список. Без лямбды все ключи делили бы один и тот же объект.

Печать