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

如何将含键值对字符串的Python列表转换为字典?

解决方案:将格式异常的键值对列表转为Python字典

原列表中的字符串不符合标准JSON或Python字面量规范,导致json.loads()和ast.literal_eval()无法直接解析,问题点包括:

  • 键的引号是HTML转义的"而非普通双引号
  • 列表值内的元素(如loopback)未加引号,不属于合法字符串
  • {{ sensor_subnets }}是模板占位符,并非合法的Python/JSON语法

以下是可行的处理代码:

import re
import ast

d = ['"id.resp_h": [loopback, unicast, multicast, interface_local_multicast, link_local_unicast, link_local_multicast, unspecified]',
     '"id.orig_h": {{ sensor_subnets }}']

result_dict = {}

for item in d:
    # 替换HTML转义引号为普通双引号
    cleaned_item = item.replace('"', '"')
    # 按第一个冒号拆分键值对,避免值内有冒号导致错误
    key_segment, value_segment = cleaned_item.split(':', 1)
    
    # 提取并清理键
    key = key_segment.strip().strip('"')
    
    # 清理值部分的前后空白
    raw_value = value_segment.strip()
    
    # 处理列表类型的值:给无引号元素添加引号后转为列表
    if raw_value.startswith('[') and raw_value.endswith(']'):
        # 匹配列表内的标识符,为其添加双引号
        formatted_value = re.sub(r'([a-zA-Z0-9_-]+)', r'"\1"', raw_value)
        # 用ast.literal_eval转为Python列表
        processed_value = ast.literal_eval(formatted_value)
    # 处理模板占位符:可根据需求替换为实际值,此处先保留占位符名称
    elif raw_value.startswith('{{') and raw_value.endswith('}}'):
        processed_value = raw_value.strip('{} ')
        # 若有实际变量,可替换为:processed_value = sensor_subnets(需提前定义变量)
    else:
        # 其他类型值可根据实际情况扩展处理逻辑
        processed_value = raw_value
    
    result_dict[key] = processed_value

print(result_dict)

代码关键点说明

  • 用replace('"', '"')修复转义引号问题
  • split(':', 1)确保只拆分键和值的分隔符,避免值内包含冒号时出错
  • 正则表达式re.sub(...)自动为列表内的无引号标识符添加双引号,使其符合Python字面量格式
  • 模板占位符的处理可灵活调整:如果有实际的sensor_subnets变量,直接替换即可

内容的提问来源于stack exchange,提问作者Amit Vikram Raj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:45:34