首页 > 解决方案 > 无法使用 python 过滤器返回预期的输出

问题描述

我正在研究网络抓取。我得到了标题列表,现在我正在过滤掉不需要的东西。但是在过滤时我没有得到预期的输出。我无法在我的代码中找到错误。

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']

标签: pythonpython-3.x

解决方案


对于解析'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']

推荐阅读