Python大规模IMDb字典数据处理:优化people_dict转movie_dict性能
优化IMDb演员-电影字典反转的性能问题
兄弟,你现在用的嵌套循环完全是在给自己挖坑啊——10万级别的数据量,O(M*N)的时间复杂度,跑一周都不奇怪。咱们得换个思路,从遍历演员→电影的方向入手,而不是反过来死磕电影找演员。
问题根源
你原来的代码逻辑是:先拿到所有电影名,然后对每一部电影,遍历所有演员的电影列表去匹配。这相当于每部电影都要扫一遍全量演员数据,数据量一大,效率直接崩了。
高效解决方案
正确的姿势是一次遍历people_dict,对每个演员的每部电影,直接把演员ID追加到对应电影的列表里。这样时间复杂度是O(T)(T是所有演员参演的电影总数量),效率能提升好几个数量级。
推荐用collections.defaultdict来简化初始化操作,代码示例:
from collections import defaultdict movie_dict = defaultdict(list) for people_id, movie_list in people_dict.items(): for movie in movie_list: movie_dict[movie].append(people_id)
如果不想引入额外模块,用普通字典配合setdefault方法也能实现:
movie_dict = {} for people_id, movie_list in people_dict.items(): for movie in movie_list: movie_dict.setdefault(movie, []).append(people_id)
为什么这个方法快?
这个逻辑只需要遍历一遍所有的演员-电影关联关系,每一步都是O(1)的字典操作(哈希表查找)。对比你原来的代码,相当于把“找电影→扫所有演员”改成了“扫演员→直接更新电影”,完全避免了重复遍历的冗余操作。
额外小提示
如果你的电影名存在重复(比如不同地区的译名、不同版本),可以先做一次标准化处理(比如统一转小写、去除特殊符号),避免生成重复的电影键。
内容的提问来源于stack exchange,提问作者Mr.Robot
相关产品推荐
相关产品推荐

