2009-10-18 152 views
2

我有一个字符串输出,它是以字典形式出现的。将字符串解析为字典

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

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

+0

保存它在哪里/如何? – SilentGhost 2009-10-18 16:17:23

+0

什么?为什么不把dict保存为dict而不是首先创建一个字符串?请提供一些更多的背景资料。这个问题没有什么意义,并表示更大和更深的问题可能导致这一点。 – 2009-10-18 19:59:51

+3

正如Dave指出的,http://stackoverflow.com/questions/988228/converting-a-string-to-dictionary是这个 – dbr 2009-10-18 23:56:30

回答

3

astr是一个“以字典形式”的字符串。 ast.literal_eval将其转换为python字典对象。

In [110]: import ast 

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

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

请注意,如果有'astr'可以包含'os.remove(“foo”)''的任何方法,那么使用'eval'并不是一个好主意。实际上, – 2009-10-18 17:14:23

1

使用json.loads - 可能会更快

+1

,json.loads – hasen 2009-10-19 01:31:35

3

这是最好的,如果你对Python的2.6+,因为它不是受制于EVAL安全漏洞。

import ast 

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

你搞砸了报价。外部使用双引号。 – 2009-10-18 23:11:02

1

你从哪里得到这个字符串?它是JSON格式吗?或python字典格式?或者只是一些类似于python字典的ad-hoc格式?

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

这种做法有一些不足之处,虽然,如果例如,该字符串用单引号',而不是双引号",更何况,它只是解析JSON对象/数组,其中仅巧合碰巧有着相似语法与pythons dicts /数组。

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