如何筛选预算与收入均大于0的电影数据并生成新字典?
排查电影数据过滤代码的问题
嘿,我来帮你梳理代码里的问题,顺便给你修正后的方案!你的代码有几个关键小问题需要调整:
- 循环对象引用错误:你写的
for movie in movie_data,但在循环里却一直用movie_data['revenue']这种写法——movie_data是整个数据集(应该是列表),不能直接用字符串键访问;正确的应该是用当前迭代的movie对象,也就是movie['revenue']。 - 条件逻辑错误:你用了
or来判断,但你的需求是预算和收入都大于0的电影,所以必须换成and;另外直接判断> 0.0比!= 0.0更严谨,能避免数据里出现负数的异常情况。 - 代码不完整:最后一行
genre = movie_...没写完,假设你是要获取电影的类型字段,记得补全为movie['genre']。
修正后的完整代码
下面是调整后的代码,我把符合条件的电影用id作为键存入新字典,对应的值是包含所需字段的子字典,结构更清晰:
movies_bud_rev = {} for movie in movie_data: # 确保预算和收入都严格大于0 if movie['budget'] > 0.0 and movie['revenue'] > 0.0: movie_id = movie['id'] movies_bud_rev[movie_id] = { 'budget': movie['budget'], 'revenue': movie['revenue'], 'original_title': movie['original_title'], 'release_year': movie['release_year'], 'genre': movie['genre'] }
可选:用列表存储过滤结果
如果你觉得列表形式更灵活(比如不需要用id做键),也可以这样写:
movies_bud_rev = [] for movie in movie_data: if movie['budget'] > 0.0 and movie['revenue'] > 0.0: filtered_movie = { 'id': movie['id'], 'budget': movie['budget'], 'revenue': movie['revenue'], 'original_title': movie['original_title'], 'release_year': movie['release_year'], 'genre': movie['genre'] } movies_bud_rev.append(filtered_movie)
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

