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

如何使用Python的dict()函数处理键值对格式的字符串变量?

字符串键值对转字典的解决方案

直接把dict_str传给dict()会报错,是因为dict()把字符串当成了字符迭代器,每个字符被当作单个元素,不符合它需要的键值对结构(每个元素得是长度2的序列,比如元组)。而你直接写dict(a = 15, a2 = 19)是传入关键字参数,和传字符串完全是两种参数形式,自然不会报错。

下面是几种可行的解决方法:

方法1:用eval快速构造(仅适用于可信输入)

如果能保证dict_str里没有恶意代码,可以把字符串拼接成dict()调用语句,再用eval执行:

dict_str = "a = 15, a2 = 19"
my_dict = eval(f"dict({dict_str})")

这就等价于直接执行dict(a = 15, a2 = 19),能直接得到目标字典。

方法2:手动解析字符串(安全适配不可信输入)

如果dict_str的格式固定为key = value, key2 = value2,可以手动拆分处理:

dict_str = "a = 15, a2 = 19"
my_dict = {}
for item in dict_str.split(","):
    # 拆分键和值,同时去掉多余空格
    key, val = item.strip().split(" = ")
    # 根据实际值类型转换,这里假设是整数,其他类型可以调整
    my_dict[key] = int(val)

这种方法不需要执行字符串代码,完全手动解析,避免了代码注入风险,适合处理外部来源的字符串。

方法3:用ast.literal_eval安全解析(兼顾安全与灵活性)

先把字符串转换成Python字典字面量的格式,再用ast.literal_eval解析(它只会处理合法的字面量,不会执行任意代码):

import ast

dict_str = "a = 15, a2 = 19"
# 把"key = value"替换成"key": value,再包裹成字典字面量
dict_literal = "{" + dict_str.replace(" = ", ": ") + "}"
my_dict = ast.literal_eval(dict_literal)

这种方法比eval安全,还能处理浮点数、字符串值等多种类型,适用性更广。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:15:38