You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:36:05