Python中如何用for循环将读取的人员信息存入嵌套字典
问题原因
你现有代码的问题在于:
- 你把
Gender键直接放在了最外层的主字典中,每次循环都会覆盖这个键的值,最终只会保留最后一行数据的性别 - 每个姓名对应的值仅存储了年龄,没有按要求存放包含年龄、性别信息的嵌套字典
你预期的{'key':value, {gender:male_or_female} }格式不符合Python字典语法,调整后的合理嵌套结构应为:外层字典的键是姓名,对应的值是包含age、gender两个键的子字典,示例如下:{'Bob': {'age': 35, 'gender': 'Male'}, 'George': {'age': 53, 'gender': 'Male'}}
解决方案
修改说明
- 循环内每个姓名对应的位置赋值为嵌套的子字典,同时存储年龄和性别
- 对分割后的数据去除多余空白字符,避免存储无效空格
- 采用
with语句打开文件,无需手动调用close()方法,异常场景下也会自动释放文件资源 - 年龄可转为整数类型,方便后续数值计算
完整实现代码
def extract_person_data(filename): dicti = {} with open(filename, 'r', encoding='utf-8') as infile: for line in infile: # 处理每行数据:去除首尾换行、按逗号分割、每个元素去除空白 words = [item.strip() for item in line.strip().split(",")] name = words[0] age = int(words[1]) gender = words[2] # 赋值嵌套字典 dicti[name] = { 'age': age, 'gender': gender } return dicti print(extract_person_data("people.txt"))
运行输出
{'Bob': {'age': 35, 'gender': 'Male'}, 'George': {'age': 53, 'gender': 'Male'}, 'Karen': {'age': 67, 'gender': 'Female'}, 'Jamie': {'age': 20, 'gender': 'Female'}, 'Aisha': {'age': 12, 'gender': 'Female'}, 'Maria': {'age': 50, 'gender': 'Female'}, 'Rolf': {'age': 16, 'gender': 'Male'}, 'Ali': {'age': 90, 'gender': 'Male'}}
内容的提问来源于stack exchange,提问作者fredericoamigo
相关产品推荐
相关产品推荐

