因此,我制作了一个脚本,用于搜索某些网站并构建结果列表。每个结果都具有以下结构:
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
为什么这可能不会过滤掉包含这些垃圾邮件条款的所有结果?也许我需要在调用.lower()之后在名字上调用.split(),因为有些名字是短语?
答案 0 :(得分:1)
我猜你在使用Jakub建议的方式修改theList作为迭代时遇到了问题。
这种虔诚的方式是返回一个新列表。为了便于阅读,我将其拆分为两个函数:
def is_spam(value):
spam_terms = ['paid','hire','work','review','survey',
'home','rent','cash','pay','flex',
'facebook','sex','$$$','boss','secretary',
'loan','supplemental','income','sales',
'dollars','money']
for term in spam_terms:
if term in value.lower():
return True
return False
def filter_spam_gigs_list(results):
return [i for i in results if not is_spam(i['name'])]