Python 将字符串解析为dict

Python 将字符串解析为dict,python,string,parsing,eval,abstract-syntax-tree,Python,String,Parsing,Eval,Abstract Syntax Tree,我有一个以dict-ex形式输出的字符串 {'key1':'value1','key2':'value2'} 如何轻松地将其保存为dict而不是字符串?astr是一个“以dict形式”的字符串。 ast.literal\u eval将其转换为python dict对象 In [110]: import ast In [111]: astr="{'key1':'value1','key2':'value2'}" In [113]: ast.literal_eval(astr) Out[11

我有一个以dict-ex形式输出的字符串

{'key1':'value1','key2':'value2'} 
如何轻松地将其保存为dict而不是字符串?

astr是一个“以dict形式”的字符串。
ast.literal\u eval
将其转换为python dict对象

In [110]: import ast

In [111]: astr="{'key1':'value1','key2':'value2'}"

In [113]: ast.literal_eval(astr)
Out[113]: {'key1': 'value1', 'key2': 'value2'}

使用json.loads-可能更快

如果您使用的是Python 2.6+,这是最好的,因为它不受eval中安全漏洞的影响

import ast

s = """{'key1':'value1','key2':'value2'}"""
d = ast.literal_eval(s)

你从哪里弄到这根绳子的?它是JSON格式的吗?还是python字典格式?或者只是一些与python字典相似的特殊格式

如果它是JSON,或者它只是一个dict,并且只包含字符串和/或数字,那么您可以使用
JSON.loads
,这是最安全的选项,因为它无法解析python代码

但是,这种方法有一些缺点,例如,如果字符串用单引号括起来,而不是用双引号括起来,更不用说它只解析json对象/数组,而json对象/数组恰好与python dicts/数组共享类似的语法


尽管我认为您得到的字符串很可能是JSON格式。我之所以这样假设是因为它是数据交换的常用格式。

请注意,如果有任何方法
astr
可以包含,比如说,
os.remove(“foo”),那么使用
eval
并不是一个好主意
。你弄乱了引号。外部引号使用双引号。这在前面的问题中得到了很好的回答。什么?为什么不将dict保存为dict而不是首先创建一个字符串?请提供更多关于这一点的上下文。这个问题没有什么意义,并且表明可能存在更大更深层的问题正如戴夫指出的,这是一个完全相同的版本