我正在研究网页抓取。我有标题列表,现在我正在过滤掉不需要的东西。但是在过滤时我没有得到预期的输出。我找不到我的代码中的错误。
import re
def filter_header(item):
if(item):
if(item == 'Rank & Title'):
rank_title_split = re.split('[&]', item)
print(rank_title_split) # getting ['Rank','Title']
return rank_title_split
else:
print(item)
return item
imdb_header_list = [False, 'Rank & Title', 'IMDb Rating', 'Your Rating', False]
imdb_filtered_header_list = filter(filter_header,imdb_header_list)
print(list(imdb_filtered_header_list))
获取输出=
['Rank & Title', 'IMDb Rating', 'Your Rating']
我的预期输出=
[['Rank','Title'],'IMDb Rating', 'Your Rating']
答案 0 :(得分:2)
对于解析'Rank & Title'
,不需要过滤器。您可以将filter_header
应用于列表中的每个项目:
imdb_filtered_header_list = [filter_header(item) for item in imdb_header_list]
然后您可以过滤出False值。
有效的实现方式:
import re
def filter_header(item):
if(item == 'Rank & Title'):
rank_title_split = re.split('[&]', item)
return rank_title_split
return item
imdb_header_list = [False, 'Rank & Title', 'IMDb Rating', 'Your Rating', False]
imdb_filtered_header_list = [filter_header(item) for item in imdb_header_list]
imdb_filtered_header_list = list(filter(bool, imdb_filtered_header_list)) # remove False values
print(imdb_filtered_header_list)
输出:
[['Rank ', ' Title'], 'IMDb Rating', 'Your Rating']
答案 1 :(得分:1)
过滤器功能定义说
The filter() function returns an iterator were the items are filtered through a function to test if the item is accepted or not.
您要寻找的是迭代器而不是过滤器