Я пытаюсь написать программу, которая рекомендует книги, используя два входа: максимальную сумму денег, которую клиент готов потратить. Строка, состоящая из первых букв всех желаемых атрибутов («ужас», «фантастика», «романтика», «фантазия»). Желаемый атрибут ввода должен быть строкой, такой как sh или shf (порядок не должен иметь значения, поэтому строка "shf" обрабатывается так же, как "fhs"). Данные книги представлены в следующем формате:
BookData = [ ["Harry Potter", 8, ["fantasy", "romance"]],
["IT", 11, ["horror", "fantasy"]],
["Star Wars", 22, ["scifi", "romance", "fantasy"]]
]
Я успешно создал фильтр, который отфильтровывает книги, превышающие максимальную стоимость клиента. Тем не менее, я не уверен, как именно извлечь первые буквы типа / атрибута книги, чтобы сформировать строку (например, fr отфильтровывает ИТ, чтобы оставить Гарри Поттера и Звездные войны), порядок символов которых не имеет значения. У кого-нибудь есть какие-либо предложения?
def recommend_books( maximum_cost, s):
bookDictionary = dict([("h",'horror'), ("s",'scifi'), ("f",'fantasy'), ("r",'romance')])
priceFilter = [c for c in BookData if c[1] <= maximum_cost]
for i in range(len(s)):
if s[i] in bookDictionary:
current = (bookDictionary[s[i]])
for j in range(len(BookData)):
if current in BookData[j][2]:
filter = [a_list for a_list in BookData if current in BookData[j][2]]
return filter
Это моя текущая попытка, однако я думаю, что делаю ошибку, когда дело доходит до сравнения текущей строки со списком строк в массиве bookData. Я не уверен, как преодолеть эту проблему?