Моя задача:
Блоги вашей компании. Вам нужно реализовать функцию find_articles для поиска статей в этом блоге. Есть список article_dict, который содержит описание статей блога. Каждый элемент этого списка представляет собой словарь со следующими ключами:
фамилии авторов - ключ ‘автор’
название статьи - ключ ‘title’
год издания - ключ ‘год’.
Реализуйте функцию find_articles,
Ключевой параметр функции определяет комбинацию букв для поиска. Например, с ключом = “Python” функция проверяет, есть ли статьи в списке article_dict с этой комбинацией букв в названии или именах авторов. Если такие элементы списка были найдены, должен быть возвращен новый список из словарей, содержащий фамилии авторов, название и год публикации всех таких статей.
Второй ключевой параметр функции letter_case определяет, должен ли поиск учитывать регистр. По умолчанию стоит False и регистр не имеет значения, то есть поиск в тексте «Python» и «python» одинаков. В противном случае нужно искать полное совпадение.
Мой код:
articles_dict = [ { "title": "Endless ocean waters.", "author": "Jhon Stark", "year": 2019, }, { "title": "Oceans of other planets are full of silver", "author": "Artur Clark", "year": 2020, }, { "title": "An ocean that cannot be crossed.", "author": "Silver Name", "year": 2021, }, { "title": "The ocean that you love.", "author": "Golden Gun", "year": 2021, }, ] # print(articles_dict[0]["title"]) def find_articles(key, letter_case=False): print(key) lst = [] while True: for l in articles_dict: if key in l['title'] or key in l['author'] or key in ['year']: for k, v in l.items(): if key in v.lower(): lst.append(f'{k} {v}\n') # result = "".join(lst) #re.search(result, key, flags=re.IGNORECASE) return lst return letter_case
Во-вторых, не подскажете, где использовать letter_case? Я думаю, что цикл while нужен, но где его писать?
В-третьих, я знаю, что основными методами поиска подстроки в строке являются строки, поэтому я сделал здесь строку, но как мне проверить, есть ли, например, ключ = “Python” в заданной строке в задаче . И так я понял, что надо учитывать случай, подозреваю, что надо использовать .lower() и .upper().
В-четвертых, не усложняю ли я опять все? После того, как я проверю, есть ли в этом тексте ключ = “Python” или что-то еще, правильно ли мне конвертировать потом из строки в список, а потом в словарь? Должен ли я сначала использовать метод split() или list(), а затем dict()?
Спасибо! Можете ли вы исправить мою логику и указать мне правильное направление!