Python不使用pandas 基于CSV首列生成多个分类字典
解决方案
原代码的问题在于两层循环都迭代同一个csv.reader迭代器,迭代器遍历一次就会耗尽,同时没有对第一列的分类做判断,所以最终得到合并的字典。以下是仅使用Python标准库的实现代码:
import csv # 初始化分类存储容器 category_maps = {} # 用with上下文管理器操作文件,避免资源泄漏 with open(r'c:\sample.csv', newline='', encoding='utf8') as f: reader = csv.reader(f) for row in reader: # 跳过格式异常的行 if not row or len(row) < 3: continue cate, key, value = row[0], row[1], row[2] # 分类不存在时先初始化空字典 if cate not in category_maps: category_maps[cate] = {} category_maps[cate][key] = value # 按你需要的格式生成对应变量 dictlanguage = [category_maps.get('language', {})] dictgender = [category_maps.get('gender', {})] # 输出验证 print(dictlanguage) print(dictgender)
如果分类数量多,不想手动定义每个变量,可以用以下代码动态生成全局变量:
for cate_name, map_data in category_maps.items(): globals()[f'dict{cate_name}'] = [map_data]
注:如果你期望的
dictlanguage确实要过滤掉1:english1这条数据,只需要在循环里加一行判断if cate == 'language' and key == '1': continue即可。
内容的提问来源于stack exchange,提问作者Yuva
相关产品推荐
相关产品推荐

