💻 Примеры

⚡ Кратко: примеры

fromkeys(), get(), setdefault(), keys(), values() и items() повторяются как базовый набор методов словаря.

View objects отражают изменения словаря, а list(view) создаёт снимок.

Вложенные структуры требуют цепочки ключей и индексов.

copy() копирует только внешний словарь, deepcopy() копирует вложенные объекты.

Dict comprehension подходит для преобразования и фильтрации словаря.

Функции повторяются через def, pass, return, *args/**kwargs и LEGB.

Практическая задача со скобками решается стеком и словарём соответствий.

global работает, но параметры и return обычно дают более предсказуемый код.

Топ-3 ошибки: менять словарь во время итерации по items(); ожидать независимых списков от dict.fromkeys(keys, []); путать локальную переменную и global.

Валидация скобок

Словарь хранит соответствия закрывающих и открывающих скобок, список работает как стек.

def is_valid_brackets(text):
    pairs = {")": "(", "]": "[", "}": "{"}
    stack = []
    for char in text:
        if char in pairs.values():
            stack.append(char)
        elif char in pairs:
            if not stack or stack.pop() != pairs[char]:
                return False
    return not stack

print(is_valid_brackets("([)]"))
print(is_valid_brackets("({[]})"))

Реверс словаря с повторяющимися значениями

setdefault() избавляет от проверки наличия ключа перед append().

def reverse_dictionary(data):
    result = {}
    for key, value in data.items():
        result.setdefault(value, []).append(key)
    return result

print(reverse_dictionary({"a": 1, "b": 2, "c": 1, "d": 3}))

Распределение студентов по баллам

Функция возвращает новую структуру и не меняет исходный словарь студентов.

def group_students(students):
    groups = {"Отличники": {}, "Хорошисты": {}, "Троечники": {}, "Не сдали": {}}
    for name, score in students.items():
        if score >= 85:
            groups["Отличники"][name] = score
        elif score >= 70:
            groups["Хорошисты"][name] = score
        elif score >= 50:
            groups["Троечники"][name] = score
        else:
            groups["Не сдали"][name] = score
    return groups

students = {"Аня": 92, "Боря": 76, "Ваня": 65, "Галя": 48}
print(group_students(students))