在Python中过滤JSON数据:处理含5000条电影演员数据的CSV JSON文件
嘿,搞定这个JSON演员数据的过滤其实很简单!我结合你的数据结构,给你整理几个最常用的Python处理方案,直接就能复用:
第一步:先把JSON数据读进Python
首先你得把本地的JSON文件加载成Python能处理的列表(你的数据本身就是字典组成的列表),用内置的json模块就行:
import json # 替换成你的JSON文件路径 with open('your_cast_data.json', 'r', encoding='utf-8') as f: cast_list = json.load(f)
这里cast_list就是包含所有演员字典的列表,接下来的过滤都基于它操作。
常见过滤场景示例
我列几个你大概率会用到的场景,你可以根据需求修改条件:
1. 按性别过滤(比如只提取女性演员)
你的数据里gender=1是女性,gender=2是男性,用列表推导式快速筛选:
# 筛选所有女性演员 female_actors = [actor for actor in cast_list if actor.get('gender') == 1] print(f"共找到 {len(female_actors)} 位女性演员")
用actor.get('gender')而不是直接actor['gender']是为了避免某些数据缺失gender字段时抛出KeyError,更安全。
2. 按角色名关键词过滤(比如找角色含"Thor"的演员)
如果想找角色名里包含特定关键词的演员,可以这么写:
# 筛选角色名包含"Thor"的演员 thor_related_actors = [ actor for actor in cast_list if 'Thor' in actor.get('character', '') ] # 打印结果 for actor in thor_related_actors: print(f"演员:{actor['name']},饰演角色:{actor['character']}")
同样用actor.get('character', '')给个默认空字符串,防止没有character字段的情况。
3. 精确匹配演员名字(比如找Taylor Kitsch)
如果要精准定位某一位演员,用生成器表达式+next()效率更高(不用遍历整个列表):
# 查找名字为Taylor Kitsch的演员 target_actor = next( (actor for actor in cast_list if actor.get('name') == 'Taylor Kitsch'), None # 没找到时返回None ) if target_actor: print(f"找到目标演员:{target_actor['name']},饰演角色:{target_actor['character']}") else: print("未找到该演员")
4. 筛选戏份靠前的主演(order值越小戏份越重)
比如要取前6位主演(order≤5),还可以顺便排序:
# 筛选order≤5的演员,再按order从小到大排序 top_cast = sorted( [actor for actor in cast_list if actor.get('order', float('inf')) <= 5], key=lambda x: x.get('order', float('inf')) ) # 按顺序打印主演 for idx, actor in enumerate(top_cast, 1): print(f"第{idx}位主演:{actor['name']},角色:{actor['character']}")
这里给order设默认值float('inf'),确保那些缺失order字段的数据不会被误选进主演列表。
5. 多条件组合过滤(比如女性演员且角色含"Princess")
如果需要同时满足多个条件,直接在列表推导式里用and/or组合就行:
# 筛选:女性演员 + 角色名包含"Princess" filtered_actors = [ actor for actor in cast_list if actor.get('gender') == 1 and 'Princess' in actor.get('character', '') ]
小提示
如果你的数据量特别大(比如超过10万条),可以把列表推导式换成生成器表达式(把[]改成()),这样不会一次性把所有数据加载到内存里,更节省资源:
# 生成器表达式版本,内存友好 female_actors_gen = (actor for actor in cast_list if actor.get('gender') == 1) # 按需迭代生成器 for actor in female_actors_gen: print(actor['name'])
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

