如何将特定格式的字符串转换为Python字典?
解决方案
核心思路是先统一引号格式,再用正则精准拆分顶级元素(避免误拆分嵌套内容里的空格),最后迭代处理嵌套结构的子项,实现字符串到嵌套字典的转换。
实现代码
import re import pprint def parse_nested_string(s): # 替换转义引号为普通双引号 s = s.replace('"', '"') # 匹配顶级元素:带双引号的完整内容 或 不含空格的连续字符 top_level_items = re.findall(r'(?:"[^"]+"|\S+)', s) result = {} for item in top_level_items: if '=' in item: # 拆分键和值(只拆第一个=,避免值里包含=的情况) key, value_part = item.split('=', 1) key = key.strip() # 处理嵌套的带引号内容 if value_part.startswith('"') and value_part.endswith('"'): inner_content = value_part[1:-1].strip() # 拆分内部子项,过滤空内容并去除前后空格 inner_items = [sub.strip() for sub in inner_content.split(',') if sub.strip()] inner_dict = {} for inner_item in inner_items: if '=' in inner_item: inner_key, inner_val = inner_item.split('=', 1) inner_dict[inner_key.strip()] = inner_val.strip() else: inner_dict[inner_item.strip()] = None result[key] = inner_dict else: # 普通键值对,去除值的前后空格 result[key] = value_part.strip() else: # 无值的键,设为None result[item.strip()] = None return result # 测试示例字符串 st1 = 'key1 key2=value2 key3="key3.1, key3.2=value3.2 , key3.3 = value3.3, key3.4" key4' dict1 = parse_nested_string(st1) # 格式化输出结果 pprint.pprint(dict1)
代码说明
- 引号统一处理:先把字符串中的
"替换为普通双引号,方便后续正则匹配。 - 顶级元素拆分:使用正则
(?:"[^"]+"|\S+)精准匹配两种顶级元素:"[^"]+":匹配带双引号的完整嵌套内容,避免拆分内部的空格和逗号\S+:匹配不含空格的普通键或键值对
- 键值对处理:
- 不含
=的项直接作为键,值设为None - 含
=的项拆分键和值,若值是带引号的嵌套内容,则进一步拆分内部子项生成子字典 - 处理子项时,自动去除多余空格,兼容
key3.3 = value3.3这种带空格的格式
- 不含
- 空项过滤:拆分内部子项时,自动过滤因多余逗号产生的空内容,保证字典结构整洁
输出结果
{'key1': None, 'key2': 'value2', 'key3': {'key3.1': None, 'key3.2': 'value3.2', 'key3.3': 'value3.3', 'key3.4': None}, 'key4': None}
内容的提问来源于stack exchange,提问作者param
相关产品推荐
相关产品推荐

