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

如何为Python字典字符串的所有键和值添加单引号?

为无引号的字典字符串添加引号以转换为dict类型

问题描述

有如下格式的字典字符串:

s = "{0: {name: [(.1, 0), (.2, 0), (.3, 0)], address: [(get--some\\data, 0), (2, 0), (3, 0)]}}"

尝试用ast.literal_eval()、eval()或json.loads()将其转换为Python字典时,因字符串中键和部分值未加引号而失败。需要将所有键和值添加单引号,得到如下格式的字符串:

s = "{'0': {'name': [('.1', '0'), ('.2', '0'), ('.3', '0')], 'address': [('get--some\\data', '0'), ('2', '0'), ('3', '0')]}}"

已完成的尝试

已通过正则表达式为所有键添加了单引号,代码如下:

import re

s = "{0: {name: [(.1, 0), (.2, 0), (.3, 0)], address: [(get--some\\data, 0), (2, 0), (3, 0)]}}"
# 为键添加单引号
a = re.sub(r'((\w+)|(\w+\s*?\w+)):', r"'\1':", s)

为值添加引号的解决方案

在已处理键的基础上,可以通过正则表达式匹配列表、元组中的无引号值,为其添加单引号:

# 为值添加单引号
result = re.sub(r'([\(\[,]\s*)([^"\',\]\)]+?)(\s*[,)\]])', r"\1'\2'\3", a)
print(result)

说明

  • 正则表达式([\(\[,]\s*)匹配元组/列表的起始符号((、[)及其后的空白字符;
  • ([^"\',\]\)]+?)匹配无引号的目标值(排除引号、逗号、闭合符号);
  • (\s*[,)\]])匹配值后的空白字符及分隔符/闭合符号;
  • 替换时将匹配到的目标值用单引号包裹,保留前后的符号和空白。

完整代码

import re

s = "{0: {name: [(.1, 0), (.2, 0), (.3, 0)], address: [(get--some\\data, 0), (2, 0), (3, 0)]}}"
# 处理键
a = re.sub(r'((\w+)|(\w+\s*?\w+)):', r"'\1':", s)
# 处理值
result = re.sub(r'([\(\[,]\s*)([^"\',\]\)]+?)(\s*[,)\]])', r"\1'\2'\3", a)
print(result)
# 输出结果:{'0': {'name': [('.1', '0'), ('.2', '0'), ('.3', '0')], 'address': [('get--some\\data', '0'), ('2', '0'), ('3', '0')]}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:50:14