Словари
Создание словарей
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})