Python实现按行读文件并以dict[key1][key2]=value结构存储数据
解决方案
要实现data_dict[region][range] = population的嵌套字典结构,你需要先判断当前地区(region)是否已存在于self.data_dict中:如果不存在,就为该地区创建一个空字典;如果已存在,直接在对应地区的字典中添加range与population的映射关系。
另外建议用with语句管理文件操作,它会自动关闭文件,避免资源泄漏。修改后的完整代码如下:
import csv # 先初始化self.data_dict为空字典(若尚未初始化) self.data_dict = {} with open(self.file_name, encoding="iso-8859-1") as file: reader = csv.DictReader(file) for line in reader: region = line["Region"].strip() # 去除字段前后多余空格 age_range = line["Range"].strip() # 变量名替换为age_range,避免与Python内置函数range冲突 population = line["Population"].strip() # 检查当前地区是否已在字典中,不存在则创建空字典 if region not in self.data_dict: self.data_dict[region] = {} # 将年龄段与人口数存入对应地区的子字典 self.data_dict[region][age_range] = population
关键说明:
- 替换变量名
range为age_range,避免和Python内置函数range()冲突引发错误。 - 使用
.strip()清理字段前后的空格,防止因文件中存在多余空格导致键名不一致。 with语句会在代码块执行完毕后自动关闭文件,比手动调用file.close()更安全可靠。
执行后,self.data_dict的结构会符合你的需求:
{ "Scotland": {"1": "10000"}, "Glasgow": {"14": "5000"}, "Edinburgh": {"15": "4000"} }
内容的提问来源于stack exchange,提问作者andsemenov
相关产品推荐
相关产品推荐

