Set comprehension создаёт множество из выражения, цикла и необязательного условия.
frozenset - неизменяемый аналог set, поэтому его можно использовать как ключ словаря или элемент другого множества.
Словарь хранит пары ключ-значение; ключ должен быть уникальным и хешируемым.
dict() создаёт словарь из именованных аргументов или последовательности пар.
Доступ через dictionary[key] быстрый, но отсутствующий ключ вызывает KeyError.
Оператор in проверяет наличие ключа, а не значения.
update() добавляет новые пары и перезаписывает существующие ключи.
del и pop() удаляют по ключу; pop() ещё возвращает удалённое значение.
Топ-3 ошибки: создавать пустое множество через {}, хотя это пустой dict; использовать list или set как ключ словаря; читать отсутствующий ключ через [] без проверки.
Проверка через in перед []
В источнике используется if key in my_dict перед доступом.
Современная практика
Это нормальный стиль, когда отсутствие ключа является отдельной веткой логики. В следующих уроках появятся get() и setdefault(), которые удобнее для значений по умолчанию.
Итерация только по ключам
for key in my_dict, затем my_dict[key].
Современная практика
Когда нужны и ключ, и значение, чаще читается for key, value in my_dict.items().
Вывод set напрямую
print(my_set) показывает множество в произвольном порядке.
Современная практика
Для учебных проверок и тестов лучше печатать sorted(my_set), если порядок важен для сравнения результата.
Проверить по документации: Современные замечания о стиле, производительности и поведении структур данных сверяйте с документацией Python версии, которую используете.