Справочник Python

Полное руководство по языку на русском

Словари

Создание словарей

empty = {}  # инициализация множества
user = {"name": "Анна", "age": 30}  # инициализация словаря
user = dict(name="Анна", age=30)  # создание словаря
pairs = dict([("a", 1), ("b", 2)])  # создание словаря

# Динамическое создание
keys = ["name", "age"]  # инициализация списка
values = ["Анна", 30]  # инициализация списка
user = dict(zip(keys, values))  # создание словаря

Доступ к элементам

user = {"name": "Анна", "age": 30}  # инициализация словаря

# Прямой доступ
user["name"]       # 'Анна'
user["city"]       # KeyError!

# Безопасный доступ с умолчанием
user.get("city")          # None
user.get("city", "Москва") # 'Москва'
user.get("name")          # 'Анна'

# setdefault — получить или создать
user.setdefault("city", "Москва")  # 'Москва' (добавлено в словарь)

# Проверка наличия
"name" in user    # True
"city" in user

Методы словарей

user = {"name": "Анна", "age": 30}  # инициализация словаря

# Изменение
user["age"] = 31
user["city"] = "Москва"

# Обновление из другого словаря
user.update({"age": 32, "job": "QA"})  # обновление из другого словаря

# Удаление
del user["city"]  # удаление
user.pop("age")        # 30 (возвращает значение)
user.pop("city", None) # None (без ошибки)
user.clear()           # {}

# Ключи, значения, пары
user.keys()     # dict_keys(['name', 'age'])
user.values()   # dict_values(['Анна', 30])
user.items()    # dict_items([('name', 'Анна'), ('age', 30)])

# Итерация
for key, value in user.items():  # цикл по элементам
    print(f"{key}: {value}")  # вывод в консоль

Dict Comprehension

# Квадраты чисел
squares = {x: x**2 for x in range(5)}  # последовательность чисел
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

# Фильтрация
even_squares = {x: x**2 for x in range(10) if x % 2 == 0}  # последовательность чисел

# Инверсия
original = {"a": 1, "b": 2}  # инициализация словаря
inverted = {v: k for k, v in original.items()}  # получение пар ключ-значение

# Трансформация
users = {"alice": 30, "bob": 25}  # инициализация словаря
adults = {name.title(): age for name, age in users.items() if age >= 18}  # получение пар ключ-значение

Слияние словарей (3.9+)

d1 = {"a": 1, "b": 2}  # инициализация словаря
d2 = {"b": 3, "c": 4}  # инициализация словаря

merged = d1 | d2       # {'a': 1, 'b': 3, 'c': 4}
d1 |= d2

OrderedDict и defaultdict

from collections import OrderedDict, defaultdict  # импорт специализированных коллекций

# OrderedDict — запоминает порядок вставки (с 3.7 dict тоже)
od = OrderedDict()  # присваивание
od["a"] = 1; od["b"] = 2

# defaultdict — значение по умолчанию для отсутствующих ключей
dd = defaultdict(int)  # словарь со значением по умолчанию
dd["a"] += 1  # {'a': 1} — автоматически создаётся 0

dd = defaultdict(list)  # словарь со значением по умолчанию
dd["items"].append(1)  # {'items': [1]}

# Counter — подсчёт элементов
from collections import Counter  # импорт специализированных коллекций
cnt = Counter("abracadabra")  # подсчёт элементов
cnt  # Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})