如何将电影名作为字典键、对应演员列表作为值构建字典?
电影-演员字典构建解决方案
问题背景
我有一个按「电影名、演员、电影名、演员……」顺序排列的文件,内容如下:
12 Years a Slave Topsy Chapman 12 Years a Slave Devin Maurice Evans 12 Years a Slave Brad Pitt 12 Years a Slave Jay Huguley 12 Years a Slave Devyn A. Tyler 12 Years a Slave Willo Jean-Baptiste American Hustle Christian Bale American Hustle Bradley Cooper American Hustle Amy Adams American Hustle Jeremy Renner American Hustle Jennifer Lawrence
需要构建一个字典,每个电影名对应其所有演员的列表,格式示例:
{'Movie Title': ['Actor1', 'Actor2'], 'Another Movie': ['ActorA', 'ActorB']}
原代码如下:
d = {} with open(file), 'r') as f: for key in f: d[key.strip()] = next(f).split() print(d)
原代码问题分析
- 语法错误:
open(file), 'r')多了一个右括号,正确写法应为open(file, 'r') - 逻辑错误:每次循环直接覆盖字典中对应电影的演员列表,导致每个电影最终只保留最后一个演员,无法收集所有参演人员
修改后的代码
d = {} # 替换为你的实际文件路径 with open("your_file.txt", 'r') as f: # 读取所有行,过滤空白行并去除每行首尾空格 lines = [line.strip() for line in f if line.strip()] # 按步长2遍历,成对处理电影名和演员 for i in range(0, len(lines), 2): movie = lines[i] actor = lines[i+1] # 收集演员:存在则追加,不存在则创建新列表 if movie in d: d[movie].append(actor) else: d[movie] = [actor] print(d)
代码说明
- 先读取文件所有内容,过滤空白行并清理每行的首尾空格,避免因换行符或多余空格导致电影名匹配失败
- 以步长2遍历处理后的行列表,每次取出一对「电影名-演员」进行处理
- 检查电影名是否已在字典中:若存在则将演员追加到对应列表,不存在则新建键值对,值为包含该演员的初始列表
- 最终生成的字典会完整保留每个电影对应的所有参演演员
运行结果
执行后将输出符合需求的字典:
{ '12 Years a Slave': [ 'Topsy Chapman', 'Devin Maurice Evans', 'Brad Pitt', 'Jay Huguley', 'Devyn A. Tyler', 'Willo Jean-Baptiste' ], 'American Hustle': [ 'Christian Bale', 'Bradley Cooper', 'Amy Adams', 'Jeremy Renner', 'Jennifer Lawrence' ] }
内容的提问来源于stack exchange,提问作者Justin Watts
相关产品推荐
相关产品推荐

