Python: Каталог товаров: dataclass, NamedTuple и field(defaultfactory=...)

Каталог товаров: dataclass, NamedTuple и field(default_factory=...)

Что уже дано

В редакторе импортированы dataclass, field и NamedTuple и оставлены места для двух типов и одной функции. Проверяющая система не передаёт готовый каталог: после кода ученика она сама создаёт категории и товары и вызывает вашу функцию.

Что нужно сделать

Объявите на верхнем уровне:

  1. Category как NamedTuple с полями name: str и code: str.
  2. Изменяемый Product как @dataclass с полями title: str, price: float, category: Category и tags: list[str]. Для tags нужен отдельный пустой список у каждого экземпляра через field(default_factory=list).
  3. Функцию make_catalog(products: list[Product]) -> dict[Category, list[Product]], которая группирует товары по категориям и сохраняет исходный порядок товаров внутри каждой группы.

Ввод и вывод

stdin не используется. Печатать через print в stdout ничего не нужно. Скрытые тесты создают объекты через ваши классы и передают список Product в make_catalog. Функция возвращает словарь, где ключи — объекты Category, а значения — списки Product.

Пример использования

paper = Category("Бумага", "paper")
book = Product("Книга", 500.0, paper)
album = Product("Альбом", 300.0, paper)
catalog = make_catalog([book, album])

print([product.title for product in catalog[paper]])
print(book.tags is album.tags)

Результат:

['Книга', 'Альбом']
False
РешениеPython

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи