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

Python嵌套字典生成异常:子字典无法正确填充内容

问题分析与修复方案

你的代码核心问题是在收集人物信息的过程中反复覆盖字典条目,导致最终子字典为空:

  • 测试代码里,每处理一行键值对就创建一个空的name_dict并赋值给final_dict[d['nom']],最后一次循环时这个空字典会覆盖之前的所有操作,所以结果里的子字典都是空的。
  • 最初的代码里嵌套的for row3 in d完全多余,而且还没收集完所有键值对就访问d['genre']等字段,容易触发键不存在的错误,同时反复创建新字典也会覆盖数据。

修复后的代码

with open('personnages.txt') as file:
    my_file = file.read()

# 按空行分割每个人物的信息块
person_blocks = my_file.split('\n\n')
final_dict = {}

for block in person_blocks:
    # 跳过可能的空块(比如文件末尾的空行)
    if not block.strip():
        continue
    # 拆分当前人物的所有属性行
    attribute_lines = block.strip().split('\n')
    person_details = {}
    # 逐个处理每个属性的键值对
    for line in attribute_lines:
        # 分割键和值,同时去除前后空格兼容格式
        key, value = line.split(':')
        person_details[key.strip()] = value.strip()
    # 用人物姓名作为外层字典的键,将完整属性字典存入
    # 如果不需要子字典里保留"nom"字段,可以用pop移除:
    # person_name = person_details.pop('nom')
    # 如果需要保留则直接取值:
    person_name = person_details['nom']
    final_dict[person_name] = person_details

print(final_dict)

代码说明

  1. 先按空行分割出每个人物的完整信息块,确保处理的是一个人的所有属性
  2. 对每个信息块,先把所有键值对收集到子字典person_details里,确保信息完整
  3. 最后用人物姓名作为外层字典的键,把完整的子字典存入final_dict
  4. 额外处理了空块和键值对的空格问题,避免因文件格式小问题出错

如果需要和你期望的输出一致(子字典里不含nom字段),就用注释里的pop方法移除nom键即可。

内容的提问来源于stack exchange,提问作者mrquaternion

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:50:23