Конвейер обработки списка фильмов

Последовательно примените сортировку по score и фильтрацию по множеству запрещённых названий. Верните новую FilmCollection, не изменяя вход.

Короткий ответ

Что ответить на собеседовании

Последовательно примените сортировку по score и фильтрацию по множеству запрещённых названий. Верните новую FilmCollection, не изменяя вход.

Подробный разбор

Ответ с пояснениями

Условие

Создайте конвейер, который последовательно обрабатывает набор фильмов. Конвейер должен выполнить два действия: сначала упорядочить фильмы по их рейтингу, затем исключить из набора фильмы, находящиеся в черном списке.


from dataclasses import dataclass

BLACK_LIST = ["Pirates of the Caribbean", 'Avengers']

@dataclass
class Film:
    title: str
    score: float

@dataclass
class FilmCollection:
    items: list[Film]

class Pipeline:
    def run(self, collection: FilmCollection) -> FilmCollection:
        pass

Ответ

Последовательно примените сортировку по score и фильтрацию по множеству запрещённых названий. Верните новую FilmCollection, не изменяя вход.

class Pipeline:
    def run(self, collection: FilmCollection) -> FilmCollection:
        ordered = sorted(collection.items, key=lambda film: film.score,
                         reverse=True)
        blocked = set(BLACK_LIST)
        allowed = [film for film in ordered if film.title not in blocked]
        return FilmCollection(allowed)

Здесь выбран порядок от высокого рейтинга к низкому; если нужен обратный, уберите reverse=True. При равных рейтингах сохраняется исходный порядок. Совпадение названия с чёрным списком точное, с учётом регистра.

Для расширяемого конвейера вынесите оба шага в отдельные преобразования. Фильтрация перед сортировкой могла бы сократить работу, но показанный вариант соблюдает заданную последовательность.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее