将字符串解析为字典

时间:2009-10-18 16:12:49

标签: python string parsing eval abstract-syntax-tree

我有一个字符串输出,它是dict ex的形式。

{'key1':'value1','key2':'value2'} 

如何轻松地将其保存为字典而不是字符串?

4 个答案:

答案 0 :(得分:3)

astr是一个“以dict形式”的字符串。 ast.literal_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'}

答案 1 :(得分:3)

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

import ast

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

答案 2 :(得分:1)

使用json.loads - 可能更快

答案 3 :(得分:1)

你从哪里得到这个字符串?它是JSON格式吗?还是python字典格式?或者只是一些碰巧类似于python词典的特殊格式?

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

这种方法虽然有一些缺点,例如,如果字符串用单引号'而不是双引号"括起来,更不用说它只解析json对象/数组了恰巧碰巧与pythons dicts / arrays共享类似的语法。

虽然我认为你得到的字符串可能是JSON格式。我做出这个假设是因为它是数据交换的常用格式。