2016-02-26 96 views
0

我有下面的代码,这与Python 2.7正常工作,但与Python 3.5.1引发异常:过滤SQLAlchemy的查询与Python 3.5

away_games = [{'home_team_results': filter(lambda x: x.team_id == g.home_team_id, g.team_stats)[0].as_dict(), 
       'away_team_results': filter(lambda x: x.team_id == g.visitor_team_id, g.team_stats)[0].as_dict()} 
       for g in self.db.query(Game).filter(Game.visitor_team == team).filter(Game.season == season)] 

跟踪:

for g in self.db.query(Game).filter(Game.home_team == team).filter(Game.season == season)] 
TypeError: 'filter' object is not subscriptable 

我已经看到类似问题的答案:TypeError: 'filter' object is not subscriptable,但它没有帮助。我应该如何重写我的代码?

回答

0

正如在TypeError: 'filter' object is not subscriptable中提到的那样,在Python 2中过滤器返回一个列表,但在Python 3中过滤器返回一个迭代器。所以,我不得不写:

next(filter(some code)) 

代替:

filter(some code)[0] 

所以有效的代码是:

away_games = [{'home_team_results': next(filter(lambda x: x.team_id == g.home_team_id, g.team_stats)).as_dict(), 
       'away_team_results': next(filter(lambda x: x.team_id == g.visitor_team_id, g.team_stats)).as_dict()} 
       for g in self.db.query(Game).filter(Game.visitor_team == team).filter(Game.season == season)]