如何在Python中以CSV前两列为键、第三列为值创建字典?
解决方案:从三列CSV创建双键字典
我明白你想要实现的是把CSV里的前两列组合成元组作为字典的键,第三列对应为值。你用pandas的思路是对的,但可能是细节没处理好(比如分隔符或者后续转换步骤),下面给你两种可行的方法:
方法一:使用Pandas(推荐,适合大型CSV)
你之前的问题大概率是没有指定正确的分隔符(你的示例CSV是空格分隔,而pandas默认用逗号分隔),或者没有明确提取第三列来转换字典。试试下面的代码:
import pandas as pd # 读取空格分隔的CSV,sep='\s+'表示匹配任意数量的空格/制表符 df = pd.read_csv("example.csv", sep='\s+') # 将前两列设置为复合索引,然后提取第三列转为字典 result_dict = df.set_index(['Column-1', 'Column-2'])['Column-3'].to_dict() print(result_dict) # 输出: {(1, 'A'): 'foo', (2, 'B'): 'bar'}
关键说明:
sep='\s+':针对你的空格分隔CSV,如果是标准逗号分隔的CSV,可以去掉这个参数,pandas会自动识别。set_index(['Column-1', 'Column-2']):把两列设置为复合索引,也就是元组形式的键。['Column-3'].to_dict():明确指定要转换为值的列,避免得到嵌套的字典结构。
方法二:原生Python实现(无需依赖库)
如果你的CSV数据量不大,也可以直接用Python内置的文件操作来实现,更轻量:
result_dict = {} with open("example.csv", 'r', encoding='utf-8') as file: # 跳过第一行表头 next(file) for line in file: # 去除换行符,按任意空格分割行内容 col1, col2, col3 = line.strip().split() # 注意把第一列转为整数(和示例输出一致) result_dict[(int(col1), col2)] = col3 print(result_dict) # 输出: {(1, 'A'): 'foo', (2, 'B'): 'bar'}
适配逗号分隔CSV的修改:
如果你的CSV是逗号分隔(比如Column-1,Column-2,Column-3),只需要把split()改成split(','),再给每个元素加strip()处理可能的空格:
col1, col2, col3 = [item.strip() for item in line.strip().split(',')]
内容的提问来源于stack exchange,提问作者notlaughing
相关产品推荐
相关产品推荐

