Поиск объявлений по ценовому диапазону и ключевому слову в названии

Отберите записи по двум условиям: нижняя граница ≤ price ≤ верхняя и вхождение запроса в title. Для поиска без учёта регистра используйте casefold с обеих сторон.

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

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

Отберите записи по двум условиям: нижняя граница ≤ price ≤ верхняя и вхождение запроса в title. Для поиска без учёта регистра используйте casefold с обеих сторон.

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

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

Условие

Дан массив объявлений. Необходимо реализовать функцию, которая отбирает те элементы, у которых цена попадает в указанный диапазон и название содержит заданный текстовый запрос.

items = [
    {"title": "3-к. квартира, 80м², 13/22 эт.", "rooms": 3, "price": 70000, "petFriendly": True},
    {"title": "2-к. квартира, 45м², 5/5 эт.", "rooms": 2, "price": 60000, "petFriendly": False, "deposit": 60000},
    {"title": "2-к. квартира, 44м², 4/4 эт.", "rooms": 2, "price": 45000, "petFriendly": True, "agency": True},
    {"title": "2-к. квартира, 44м², 4/4 эт.", "rooms": 2, "price": 45000, "petFriendly": True, "agency": True, "fee": 45000},
    # ...
]

Ответ

Отберите записи по двум условиям: нижняя граница ≤ price ≤ верхняя и вхождение запроса в title. Для поиска без учёта регистра используйте casefold с обеих сторон.

Предположим, объявления уже прошли проверку структуры:

def find_items(items, min_price, max_price, query):
    if min_price > max_price:
        raise ValueError('Invalid price range')
    query = query.casefold()
    return [item for item in items
            if min_price <= item['price'] <= max_price
            and query in item['title'].casefold()]

Границы включены. Пустой запрос подходит ко всем названиям; порядок и дубли объявлений сохраняются. Функция возвращает ссылки на исходные словари, не копии. Дополнительные поля petFriendly, deposit и fee не участвуют, поскольку условие их не задаёт.

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

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

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

Подробнее