У меня длинный список, созданный с помощью Beautiful Soup в Python 3.
Прямо сейчас список генерируется так ...
mylist = [a['href'] for a in soup.find_all('a', href=True) if a.text]
Это веб-утилита, но просто знайте, что она возвращает список.
И в виде списка он возвращает такие результаты:
каталог / категория / книги / travel_2 / index.html ',
'каталог / категория / книги / mystery_3 / index.html',
каталог / категория / книги / историко-fiction_4 / index.html '
Прежде чем распечатать свой список, я хотел бы удалить различную бесполезную информацию (такую как «каталог /», «категория /» и «книги /»), чтобы отображалась только важная информация (путешествия, тайна или история фантастика).
Мне удалось успешно заменить одну вещь, используя:
mylist = [item.replace("catalogue/category/", "") for item in mylist]
Который работал отлично. Но я не верю, что .replace будет принимать более двух аргументов, что не позволяет мне удалить из результатов дополнительные вещи, такие как «index.html». Я бы предпочел не писать эту строку для всего, что я хочу заменить. Вот почему я пытаюсь использовать ключи и значения из словаря в качестве аргументов .replace ():
replacedict = {"catalogue/category/": "" , "index.html": ""}
mylist = [a['href'] for a in soup.find_all('a', href=True) if a.text]
def replace_all(mylist, replacedict):
for k, v in replacedict.items():
mylist = [item.replace(k, v) for item in mylist]
return mylist
replace_all(mylist, replacedict)
print(mylist)
В данный момент программа не выдает никаких ошибок при запуске. Но это также просто НЕ делает то, что я прошу об этом. Он просто возвращает большой список результатов, показанных выше, без удаления или замены.
Очень смущен, хотя я уверен, что ответ прямо передо мной.
Цените любую помощь, нигде не смог найти такой же вопрос.