我有一个字符串
"{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__
.调用此方法来查找字典中缺少的键。在这种情况下,我们只返回键,因此字典将键映射到自己。然后是source
是 eval
使用 identdict
实例为 globals
争论。 eval
将从 globals
中查找变量的值映射;因为它是 identdict
,访问的每个变量的值现在方便地是变量的名称。适用于更复杂的字符串作为值,以及任何正确的 Python 文字语法。
关于python - 如何将带有不带引号的键的字符串转换为 Python 中的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37935918/