Отберите записи по двум условиям: нижняя граница ≤ 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 не участвуют, поскольку условие их не задаёт.