Python通过参数给字典键赋值时出现额外双引号问题咨询
问题原因及解决方案
错误原因
你从configuration中读取到的value1、value2并非Python原生列表类型,而是字符串格式的列表字面量。外层的双引号是Python标识字符串类型的标记,本质上你拿到的是一整串符合Python列表写法的文本,所以直接遍历的时候会逐字符读取,第一个字符就是[,和你的判断一致。
解决方法
按照优先级从高到低推荐以下方案:
- 方案1:使用
ast.literal_eval转换(最安全,仅解析Python字面量,不会执行恶意代码)
代码示例:import ast # 读取配置后先做类型转换 value1 = ast.literal_eval(configuration.value1) value2 = ast.literal_eval(configuration.value2) Services = {'mmbtu': value1, 'mmgal': value2} # 后续遍历逻辑不变 - 方案2:使用
json模块转换(需要先替换单引号为JSON标准的双引号)
代码示例:import json value1 = json.loads(configuration.value1.replace("'", '"')) value2 = json.loads(configuration.value2.replace("'", '"')) - 方案3:从源头修改配置存储逻辑
如果有权限调整configuration的写入规则,直接将数组以列表类型存储,不要转成字符串后再存储,读取时就无需额外做类型转换。
转换完成后可通过print(type(value1))验证,输出为<class 'list'>即代表转换成功,遍历即可正常获取每个元素值。
内容的提问来源于stack exchange,提问作者user16443603
相关产品推荐
相关产品推荐

