如何利用was_in_movie列表将演员ID关联字典转换为姓名关联字典?
基于演员参演关系列表生成姓名关联字典
现有数据
# 演员ID与姓名的映射字典 actors = {'1': 'John', '2': 'Richard', '3': 'Lisa', '4': 'Jennifer'} # 共同参演同一部电影的演员ID对列表 was_in_movie = [(1,2), (1,3), (3,4)]
需求
生成以演员姓名为键,对应共同参演的其他演员姓名集合为值的字典,预期输出:
{'John': {'Lisa', 'Richard'}, 'Richard': {'John'}, 'Lisa': {'John', 'Jennifer'}, 'Jennifer': {'Lisa'}}
解决方案(借助was_in_movie列表直接构建)
利用collections.defaultdict自动初始化空集合,遍历参演ID对完成双向关联的姓名转换:
from collections import defaultdict # 初始化存储姓名关联的字典 name_relations = defaultdict(set) for id1, id2 in was_in_movie: # 将整数ID转为字符串,匹配actors字典的键 name1 = actors[str(id1)] name2 = actors[str(id2)] # 双向添加参演关联(A和B共同参演,互相加入对方的关联列表) name_relations[name1].add(name2) name_relations[name2].add(name1) # 可选:将defaultdict转为普通字典(不转也可正常使用) name_relations = dict(name_relations) print(name_relations)
补充:基于已有ID关联字典转换
如果已经通过was_in_movie生成了ID为键的关联字典,也可以直接转换为姓名格式:
# 已生成的ID关联字典 id_relations = {1: {2, 3}, 2: {1}, 3: {1, 4}, 4: {3}} name_relations = {} for actor_id, co_actor_ids in id_relations.items(): # 转换键为姓名 actor_name = actors[str(actor_id)] # 转换集合内的ID为姓名 co_actor_names = {actors[str(co_id)] for co_id in co_actor_ids} name_relations[actor_name] = co_actor_names print(name_relations)
内容的提问来源于stack exchange,提问作者OSA__idk
相关产品推荐
相关产品推荐

