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

2023-11-23

我有一根绳子

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

请注意,字典条目的键未加引号,因此一个简单的eval("{a:'b', c:'d',e:''}")如建议的上一个问题不起作用。

将此字符串转换为字典的最方便的方法是什么?

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

如果这是来自可信来源(不要将其用于一般用户输入,因为评估不安全;但话又说回来,如果您从潜在的恶意用户那里获取输入,您应该使用 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)

prints

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中将带有不带引号的键的字符串转换为字典 的相关文章

随机推荐