如何将键无引号、值含逗号的字典字符串转为Python字典?
Python无引号键字典字符串转标准字典方案
核心思路
字符串无法直接用ast.literal_eval转换的核心原因是键未被引号包裹,我们可以通过正则匹配先为所有合法键补全引号,再执行转换,全程不会修改单引号包裹的值内容,可完整保留值中的逗号。
完整可运行代码
import re import ast str_to_convert = "{rpd.col_A : 'Type B', rpd_dev : 'Other, specify', rpd_form : 'Other'}" # 正则匹配未加引号的键,自动补双引号 processed_str = re.sub(r'([{,]\s*)([a-zA-Z0-9_.]+)(\s*:)', r'\1"\2"\3', str_to_convert) # 转换为Python字典 result_dict = ast.literal_eval(processed_str) print(result_dict) # 输出:{'rpd.col_A': 'Type B', 'rpd_dev': 'Other, specify', 'rpd_form': 'Other'}
正则规则说明
([{,]\s*):匹配字典开头的{或者键值对分隔的,,以及后面的任意空白字符,作为第一组保留([a-zA-Z0-9_.]+):匹配由字母、数字、下划线、点组成的合法键名,作为第二组,替换时为其包裹双引号(\s*:):匹配键后面的任意空白和冒号分隔符,作为第三组保留
这种写法完全不会触碰单引号包裹的value区域,因此rpd_dev对应值中的逗号会完整保留。
内容的提问来源于stack exchange,提问作者Zakyl
相关产品推荐
相关产品推荐

