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

Python解析多组同键头部字符串生成字典列表避免键值覆盖

问题根因

原有代码存在3个逻辑错误,导致无法得到预期结果:

  • 目标字符串使用反斜杠做行续接,实际存储为连续单行文本,不存在\n换行符,按换行拆分的逻辑完全无法切分内容
  • 仅初始化了1个全局字典存储所有内容,相同键名的后续赋值会直接覆盖前序值,自然只会保留最后一组记录的内容
  • 直接对整段文本按:做单次拆分的逻辑不成立,连续排列的键值对会被错误切分,出现键值混杂的问题
修正代码

使用正则做分段和键值对提取,兼容格式中冒号前后空格不一致的情况:

import re

header = "Type : 0 Record Size : 0x10 id : 0x1 Version : 0x1 Bas : 0x1 Size : 0x10\
    Type : 0 Record Size : 0x20 id : 0x2 Version : 0x2 Bas : 0x2 Size : 0x20\
    Type : 0 Record Size: 0x30 id : 0x3 Version : 0x3 Bas : 0x3 Size : 0x30"

record_list = []
# 以每条记录的起始标识"Type"为分割点切分整段文本,自动跳过段间空白
for segment in re.split(r'\s+(?=Type\s*:)', header.strip()):
    # 正则匹配所有「键 : 值」格式的配对,兼容键名含空格、冒号前后空格数不统一的情况
    kv_pairs = re.findall(r'([a-zA-Z][a-zA-Z\s]*?)\s*:\s*(\d+|0x[0-9a-fA-F]+)', segment)
    current_record = {key.strip(): value.strip() for key, value in kv_pairs}
    record_list.append(current_record)
运行结果

执行后record_list的内容和预期完全一致:

[
    {'Type': '0', 'Record Size': '0x10', 'id': '0x1', 'Version': '0x1', 'Bas': '0x1', 'Size': '0x10'},
    {'Type': '0', 'Record Size': '0x20', 'id': '0x2', 'Version': '0x2', 'Bas': '0x2', 'Size': '0x20'},
    {'Type': '0', 'Record Size': '0x30', 'id': '0x3', 'Version': '0x3', 'Bas': '0x3', 'Size': '0x30'}
]
实现说明
  • 分段逻辑使用正则正向预查,匹配Type字段前的空白位置做切割,不会丢失每条记录的Type键值
  • 键值匹配逻辑自动兼容格式差异:比如第三条记录中Record Size: 0x30冒号前无空格,其余记录冒号前后有空格,都可以正常识别
  • 每处理一条记录就新建独立字典存储,不会出现跨记录的键值覆盖问题
  • 不需要额外处理字符串里续行带来的多余缩进空格,正则会自动跳过段间空白

内容的提问来源于stack exchange,提问作者manjunath K.R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 05:24:29