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
相关产品推荐
相关产品推荐

