Итак, я создал скрипт, который скрежет некоторых сайтов и строит список результатов. Каждый результат имеет следующую структуру:Фильтровать элементы из списка на основе их, содержащие условия спама
result = {'id': id,
'name': name,
'url': url,
'datetime': datetime,
}
Я хочу, чтобы отфильтровать результаты из списка результатов, основанных на спам термы в названии. Я определил следующую функцию, и, кажется, фильтровать определенные результаты, но не все из них:
def filterSpamGigsList(theList):
index = 0
spamTerms = ['paid','hire','work','review','survey',
'home','rent','cash','pay','flex',
'facebook','sex','$$$','boss','secretary',
'loan','supplemental','income','sales',
'dollars','money']
for i in theList:
for y in spamTerms:
if y in i['name'].lower():
theList.pop(index)
break
index += 1
return theList
Любой ключ, почему это не может быть отфильтровывая все результаты, содержащие эти термины спам? Может быть, мне нужно вызвать .split() на имя после вызова .lower(), поскольку некоторые из имен являются фразами?
Вы изменяете 'theList' на месте, итерации по нему. Изменяет ли строку 'для i в списке:' to 'для i в списке справки [:]:'? 'theList [:]' в основном делает копию списка. – Jakub
Я думаю, что вы можете достичь этого в одиночном для цикла ... для i в результатах: , если я ['name']. Lower() в spamTerms: print i – Transhuman
@Jakub Это имеет большой смысл! Спасибо! – gareit