Python读取txt文本按name分组解析学生数据存入字典问题求助
问题解决方法
核心问题根因
你的代码问题出在存储逻辑的触发时机错误:
- 仅在识别到爱好行时才存储当前学生数据,导致没有爱好的Alice不会被录入
- 每遇到一条爱好就重置数据,导致同一学生的多段属性被拆分
- 遇到新的学生姓名时没有先存储上一名学生的数据,导致前序学生数据被覆盖
最小修改方案
仅调整存储触发逻辑,保留你原有代码的所有变量定义和行判断逻辑:
with open ('student.txt','r') as file: main_dict ={} sibling_lst = [] hobby_lst = [] header = 'Name,Siblings,Hobbies'.split(',') student_dict = dict.fromkeys(header,'N/A') for eachline in file: eachline = eachline.strip() if 'name' in eachline: # 遇到新姓名时,先存储上一个未归档的学生 if student_dict['Name'] != 'N/A': main_dict[student_dict['Name']] = student_dict # 重置数据 student_dict = dict.fromkeys(header,'N/A') sibling_lst = [] hobby_lst = [] # 赋值当前学生姓名 student_dict['Name'] = eachline if 'sibling' in eachline: sibling_lst.append(eachline.replace(',','')) student_dict['Siblings'] = sibling_lst if 'hobby' in eachline: hobby_lst.append(eachline) student_dict['Hobbies']= hobby_lst # 循环结束后存储最后一名学生(没有下一个name触发存储) main_dict[student_dict['Name']] = student_dict # 打印验证结果 for k, v in main_dict.items(): print(f"{repr(k)}: {v},")
运行输出
完全符合你给出的预期格式:
'name-> Alice': {'Name': 'name-> Alice', 'Siblings': 'N/A', 'Hobbies': 'N/A'}, 'name-> Sam': {'Name': 'name-> Sam', 'Siblings': ['sibling-> Kate', 'sibling-> Luke'], 'Hobbies': ['hobby_1-> football', 'hobby_2-> games']}, 'name-> Ramsay': {'Name': 'name-> Ramsay', 'Siblings': 'N/A', 'Hobbies': ['hobby_1-> dance', 'hobby_2-> swimming', 'hobby_3-> jogging']},
内容的提问来源于stack exchange,提问作者SirCuddles
相关产品推荐
相关产品推荐

