📝 Практические задания

⚡ Кратко: задания

fromkeys() создаёт словарь с одинаковым значением для набора ключей.

Если передать fromkeys() изменяемый объект, все ключи будут ссылаться на один и тот же объект.

get() безопасно возвращает значение или default вместо KeyError.

setdefault() возвращает значение ключа, а если ключа нет - добавляет его.

keys(), values() и items() возвращают динамические view objects.

Вложенные словари позволяют хранить иерархичные данные.

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

Dict comprehension создаёт словарь в одну читаемую конструкцию.

Топ-3 ошибки: использовать dict.fromkeys(keys, []) для независимых списков; ожидать, что list(dictionary.keys()) будет обновляться вместе со словарём; путать shallow copy и deep copy во вложенных структурах.

Задание 1. fromkeys без ловушки

Создайте словарь с ключами a, b, c и независимыми пустыми списками.

keys = ["a", "b", "c"]

Задание 2. get()

Получите city из словаря пользователя с default Unknown.

user = {"name": "Alice", "age": 30}

Задание 3. setdefault()

Сгруппируйте имена студентов по названию группы.

pairs = [("Python", "Alice"), ("Python", "Bob"), ("QA", "Eva")]

Задание 4. items()

Выведите строки key: value для словаря.

person = {"name": "Alice", "age": 30, "city": "New York"}

Задание 5. Вложенный доступ

Добавьте ученика Daisy в class1.

school = {...}

Задание 6. Dict comprehension

Создайте словарь квадратов чисел.

numbers = [1, 2, 3, 4]

Задание 7. Сравнение

Проверьте, равны ли словари с разным порядком ключей.

dict1 = {"a": 1, "b": 2}; dict2 = {"b": 2, "a": 1}

Задание 8. ДЗ: распределение

Разделите студентов по группам успеваемости.

students = {"Аня": 92, "Боря": 76, "Ваня": 65, "Галя": 48, "Дима": 88, "Ева": 54}

Проверка понимания

Выберите один вариант ответа. После клика правильный ответ подсветится зелёным.

Вопрос 1

Что хранит dict?

Вопрос 2

Что гарантирует set?

Вопрос 3

Какой стиль имён переменных обычно рекомендует PEP 8?

Вопрос 4

Зачем использовать f-strings в современном Python?

Вопрос 5

Когда полезен ранний возврат из функции?

Вопрос 6

Что делает аннотация типа в Python?

Вопрос 7

Как лучше обрабатывать ожидаемую ошибку преобразования?