You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:12:06