如何将没有双引号元素的列表的字符串表示形式转换为实际列表?
我参考了许多来源,但大多数用途json.loads()或ast.literal_eval()不适用于我的情况:
x = '[(0.0, 58.099669), 56565, Raining]'
预期输出:
x = [(0.0, 58.099669), 56565, 'Raining']
有什么解决方法吗?
回答
那这个呢:
class default_key(dict):
def __missing__(self, key):
return key
d = default_key()
x = '[(0.0, 58.099669), 56565, Raining]'
res = eval(x, d, {})
# res = [(0.0, 58.099669), 56565, 'Raining']
解释:eval通常使用globals()和locals()字典。但是,如果您不提供locals()并替换globals()为在查找完成时返回键名称的 dict(并且未找到键),则给定列表中的每个“变量”名称都将转换为字符串什么时候eval被调用。
然而,这仍然可能是不安全的。看到这个。
- This has worked very beautifully for me! Thank you so much for this clever solution!