python - 如何将带有不带引号的键的字符串转换为 Python 中的字典

标签 python

我有一个字符串

"{a:'b', c:'d',e:''}"

请注意字典条目的键没有被引用,所以一个简单的 eval("{a:'b', c:'d',e:''}")正如 previous question 中所建议的不起作用。

将此字符串转换为字典最方便的方法是什么?
{'a':'b', 'c':'d', 'e':''}

最佳答案

如果这是来自 可信来源 (不要将其用于一般用户输入,如 eval is not secure ;但话说回来,如果您从潜在恶意用户那里获得输入,则应使用 JSON 格式和 json module 代替),您可以使用 eval用一个技巧。

source = """{e: '', a: 'b', c: 'd'}"""

class identdict(dict):
    def __missing__(self, key):
        return key

d = eval(source, identdict())
print(d)

打印
{'a': 'b', 'c': 'd', 'e': ''}

这是如何工作的,我们创建了一个新的字典子类 identdict定义魔术方法 __missing__ .调用此方法来查找字典中缺少的键。在这种情况下,我们只返回键,因此字典将键映射到自己。然后是sourceeval使用 identdict实例为 globals争论。 eval将从 globals 中查找变量的值映射;因为它是 identdict ,访问的每个变量的值现在方便地是变量的名称。

适用于更复杂的字符串作为值,以及任何正确的 Python 文字语法。

关于python - 如何将带有不带引号的键的字符串转换为 Python 中的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37935918/

相关文章:

python - 轨迹球转动不正确

python - 流框架错误

python - 打开文件夹中的所有文档并将它们放入列表中

python - 在 QWebView 中设置用户代理

python - 使用 Plotly Python 在条形图中生成随机颜色

python - 使用 Pandas 在csv中格​​式化电话号码

python - 如何使用列表制作 if 语句

python - 使用python对列表中相同键的多个值求和

python - 安装 ScrapyJS - python 新手

Python:绘制从x轴上的点(X1,0)到点(X2,Y2)的线的问题