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

Python中如何将key=value格式的字符串转换为dict字典类型

错误原因

你直接将字符串传入dict()构造函数会触发报错,是因为dict()要求传入的参数是可迭代的键值对序列,而直接迭代字符串会逐个返回单个字符,每个字符长度为1,不满足键值对要求的长度为2的规则,因此抛出ValueError。

解决方案

下面提供两种可直接使用的实现方式:

方式1:手动解析(兼容性最强,无任何安全风险)

适合不确定字符串内容是否包含特殊字符的场景:

fileOutput = "(id=336346860, name='Western Australia', slug='western-australia', has_public_page=True, lat=-26.0, lng=121.0)"

# 去除首尾括号,分割得到每个键值对
item_list = [item.strip() for item in fileOutput.strip("()").split(",")]
result = {}

for item in item_list:
    # 仅分割第一个等号,避免值内部包含等号时解析出错
    key, raw_value = item.split("=", 1)
    # 自动适配值的类型
    if raw_value == "True":
        value = True
    elif raw_value == "False":
        value = False
    elif raw_value == "None":
        value = None
    elif raw_value.startswith(("'", '"')):
        value = raw_value.strip("'\"")
    elif "." in raw_value:
        value = float(raw_value)
    else:
        value = int(raw_value)
    result[key] = value

print(result)
# 输出:{'id': 336346860, 'name': 'Western Australia', 'slug': 'western-australia', 'has_public_page': True, 'lat': -26.0, 'lng': 121.0}

方式2:精简解析(代码量少,仅适用于格式规范的场景)

通过限定命名空间的eval实现,不会有恶意代码执行风险:

fileOutput = "(id=336346860, name='Western Australia', slug='western-australia', has_public_page=True, lat=-26.0, lng=121.0)"

# 构造dict调用表达式,严格限制命名空间保证安全
result = eval(f"dict{fileOutput}", {"__builtins__": None}, {"dict": dict})
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:57:02