如何基于电影-演员字典生成演员-合作演员映射字典?
生成合作演员字典的解决方案
给定一个结构为「电影名: 参演演员集合」的字典,示例输入如下:
movie_dict = { 'Sleepers': {'Brad Pitt', 'Kevin Bacon', 'Dustin Hoffman'}, 'Troy': {'Brad Pitt', 'Diane Kruger'}, 'Meet Joe Black': {'Brad Pitt', 'Anthony Hopkins'}, 'Oceans Eleven': {'Julia Roberts', 'Brad Pitt', 'George Clooney'}, 'Seven': {'Brad Pitt', 'Morgan Freeman'} }
需要生成一个新字典,将每位演员作为键,对应值为该演员所有合作演员的集合(不含演员本人)。
解决代码
# 初始化合作演员字典 co_actors = {} # 遍历每部电影的参演演员集合 for actors in movie_dict.values(): # 处理当前电影里的每个演员 for actor in actors: # 若演员未在结果字典中,先初始化空集合 if actor not in co_actors: co_actors[actor] = set() # 把当前电影中除自己外的其他演员加入合作集合(自动去重) co_actors[actor].update(actors - {actor}) # 打印结果 for actor, partners in co_actors.items(): print(f"{actor}: {partners}")
代码逻辑说明
- 先创建空字典
co_actors用来存最终结果。 - 遍历原字典里每部电影的演员集合:
- 对每个演员,先检查是否已在结果字典中,没有就初始化一个空集合。
- 用集合差集
actors - {actor}拿到当前电影里除该演员外的所有合作者,再通过update方法把这些合作者添加到该演员的集合中——集合会自动去重,不用担心同一合作者被重复添加。
运行结果示例
Brad Pitt: {'Kevin Bacon', 'Diane Kruger', 'Anthony Hopkins', 'Julia Roberts', 'George Clooney', 'Morgan Freeman', 'Dustin Hoffman'} Kevin Bacon: {'Brad Pitt', 'Dustin Hoffman'} Dustin Hoffman: {'Brad Pitt', 'Kevin Bacon'} Diane Kruger: {'Brad Pitt'} Anthony Hopkins: {'Brad Pitt'} Julia Roberts: {'Brad Pitt', 'George Clooney'} George Clooney: {'Brad Pitt', 'Julia Roberts'} Morgan Freeman: {'Brad Pitt'}
内容的提问来源于stack exchange,提问作者user19559914
相关产品推荐
相关产品推荐

