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

Python拆分含空格键名的键值对时出现IndexError的解决求助

处理含空格键名的字符串转字典问题

问题场景

给定如下格式的字符串:

'EXP DATE: 13.04.2022 PO: P101'
'LOCATION: 111 CONDITION: FN'

需要转换为对应的字典:

{"EXP DATE": "13.04.2022", "PO": "P101"}
{"LOCATION": "111", "CONDITION": "FN"}

原实现的函数在处理不含空格键名的字符串时正常,但遇到带空格的键名(如EXP DATE)时会触发IndexError: list index out of range:

def create_key_pair(lst):
    return {lst[i].replace(':', ''): lst[i + 1] for i in range(0, len(lst), 2)}

报错原因:原函数依赖按空格拆分后的列表按「键-值」成对排列,但含空格的键会被拆成多个元素,破坏了成对结构,导致遍历到末尾时索引越界。

可行解决方案

正则表达式匹配法(推荐)

利用正则精准匹配「允许含空格的键(以冒号结尾)」和「对应的值(直到下一个键或字符串结束)」,完美适配两种键名格式:

import re

def str_to_dict(input_str):
    # 匹配模式:捕获键(含空格,到冒号为止)和对应的值
    match_pattern = r'([\w\s]+?):\s*([^:]+?)(?=\s+\w|$)'
    key_value_pairs = re.findall(match_pattern, input_str)
    # 去除键值两端的空白符后构建字典
    return {key.strip(): value.strip() for key, value in key_value_pairs}

# 测试验证
test_str1 = 'EXP DATE: 13.04.2022 PO: P101'
test_str2 = 'LOCATION: 111 CONDITION: FN'

print(str_to_dict(test_str1))  # 输出: {'EXP DATE': '13.04.2022', 'PO': 'P101'}
print(str_to_dict(test_str2))  # 输出: {'LOCATION': '111', 'CONDITION': 'FN'}

正则模式说明:

  • ([\w\s]+?)::非贪婪匹配字母、数字、空格组成的键,直到遇到冒号
  • \s*:匹配键和值之间的任意空白字符(包括空格、制表符等)
  • ([^:]+?):非贪婪匹配除冒号外的所有字符作为值
  • (?=\s+\w|$):正向预查,确保值匹配到下一个键的开头(空格+字母/数字)或字符串结尾时停止

非正则的手动拆分法

如果不想依赖正则,可以通过按冒号分割后逐个重组键值对,但逻辑相对繁琐:

def str_to_dict(input_str):
    segments = input_str.split(':')
    result = {}
    current_key = segments[0].strip()
    
    for seg in segments[1:]:
        # 分割当前段为值和下一个键
        parts = seg.rsplit(' ', 1)
        if len(parts) == 2:
            value, next_key = parts
            result[current_key] = value.strip()
            current_key = next_key.strip()
        else:
            # 处理最后一个值
            result[current_key] = seg.strip()
    
    return result

这个方法通过反向分割每个冒号后的片段,分离出值和下一个键,也能处理带空格的键名,但对复杂格式的兼容性不如正则。

内容的提问来源于stack exchange,提问作者Александр Хипхопов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:00:59