我有一根绳子
"{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(使用前将#替换为@)