如何利用CSV文件创建以列名为键的嵌套字典?
从CSV文件生成以列名为键的字典结构
如果你想把CSV文件的每一行转换成以列名为键的字典,并整合到一个列表(或嵌套字典)中,用Python标准库的csv模块就能轻松实现,以下是两种常见场景的解决方案:
场景1:生成字典列表(匹配你的示例格式)
这种方式会把CSV的每一行转为一个字典,所有字典存放在一个列表里,和你给出的示例结构完全一致:
import csv def csv_to_dict_list(csv_file_path): dict_list = [] # 打开CSV文件,指定编码(根据你的文件实际编码调整,比如gbk) with open(csv_file_path, mode='r', encoding='utf-8') as f: # DictReader自动将第一行表头作为字典的键 reader = csv.DictReader(f) # 遍历每一行,转成字典后加入列表 for row in reader: dict_list.append(dict(row)) return dict_list # 调用示例,替换成你的CSV文件路径 output = csv_to_dict_list("your_data.csv") print(output)
运行后输出会是类似这样的结构:
[ {'name':'john' , 'sname':'doe' , 'address':'120 Jefferson st'}, {'name':'jack' , 'sname':'McGinnis', 'address':'202 hobo'} ]
场景2:生成嵌套字典(外层用唯一值做键)
如果你需要一个外层字典,用CSV中某列的唯一值(比如name)作为键,对应的值是该行的字典,可以用这个方法:
import csv def csv_to_nested_dict(csv_file_path, key_col='name'): nested_dict = {} with open(csv_file_path, mode='r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: # 用指定列的值作为外层字典的键 nested_dict[row[key_col]] = dict(row) return nested_dict # 调用示例 output = csv_to_nested_dict("your_data.csv") print(output)
输出结构示例:
{ 'john': {'name':'john' , 'sname':'doe' , 'address':'120 Jefferson st'}, 'jack': {'name':'jack' , 'sname':'McGinnis', 'address':'202 hobo'} }
注意事项
- 确保CSV文件的第一行是列名(表头),
DictReader会自动读取这一行作为字典的键 - 如果CSV文件编码不是UTF-8,修改
encoding参数为对应编码(比如gbk、utf-16) - 如果遇到空行或格式错误的行,可以添加异常处理逻辑跳过或报错
内容的提问来源于stack exchange,提问作者Nazeer Qazi
相关产品推荐
相关产品推荐

