@fumarys

Как удалить строку из list при упоминании из списка слов?

Здравствуйте! Столкнулся со следующей проблемой. Имеется list со следующей информацией:
[{'name': 'Arsenal', 'manager': 'Mikel Arteta', 'url': 'https://site.com/clubs/1030/?from=c_london'
 {'name': 'Aston Villa', 'manager': 'Dean Smith', 'url': 'https://site.com/clubs/1040/'
 {'name': 'Brentford', 'manager': 'Thomas Frank', 'url': 'https://site.com/clubs/1050/?from=city_london'
 {'name': 'Brighton and Hove Albion', 'manager': 'Graham Potter', 'url': 'https://site.com/clubs/1020/'}]

Подскажите пожалуйста, каким образом можно целиком удалить строки, где встречается упоминание "?from=" с возможностью расширить список упоминающихся слов?

Пример того, что должно остаться:
p.s. Количество строк может быть абсолютно разным
[{'name': 'Aston Villa', 'manager': 'Dean Smith', 'url': 'https://site.com/clubs/1040/'
 {'name': 'Brighton and Hove Albion', 'manager': 'Graham Potter', 'url': 'https://site.com/clubs/1020/'}]
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ответы на вопрос 3
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
a = [x for x in a if '?from' not in x['url']]
Ответ написан
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
a = [
     {'name': 'Arsenal', 'manager': 'Mikel Arteta', 'url': 'https://site.com/clubs/1030/?from=c_london'},
     {'name': 'Aston Villa', 'manager': 'Dean Smith', 'url': 'https://site.com/clubs/1040/'},
     {'name': 'Brentford', 'manager': 'Thomas Frank', 'url': 'https://site.com/clubs/1050/?from=city_london'},
     {'name': 'Brighton and Hove Albion', 'manager': 'Graham Potter', 'url': 'https://site.com/clubs/1020/'}
]
a = list(filter(lambda x:'?from' not in x['url'], a))
print(a)
# [{'name': 'Aston Villa', 'manager': 'Dean Smith', 'url': 'https://site.com/clubs/1040/'}, 
# {'name': 'Brighton and Hove Albion', 'manager': 'Graham Potter', 'url': 'https://site.com/clubs/1020/'}]
Ответ написан
@Kadabrov
Вначале исправляешь list, который в примере
затем делаешь for для list используя enumerate(list)
делаешь второй for для распаковки словаря проверяешь с помошью if на наличие текста "?from=" в значении словаря
если условие верно, то из листа удаляешь с помошью list.pop(index строки) всю строку

если не интересно разобраться самому под спойлом код
spoiler
for i in enumerate(list):
    for  v in i[1].values():
        if '?from=' in v:
            list.pop(i[0])
print(list)


самому интересно, как это оформить в list comprehension
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы