views:

163

answers:

5

I have a string output which is in form of a dict ex.

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

how can make easily save it as a dict and not as a string?

+1  A: 

astr is a string which is "in the form of a dict". eval() converts it to a python dict object.

astr="{'key1':'value1','key2':'value2'}"

adict=eval(astr)

print(adict)
# {'key1': 'value1', 'key2': 'value2'}
unutbu
Note that this using `eval` is not such a good idea if there's any way `astr` can contain, say, `os.remove("foo")`.
Robert Rossney
+4  A: 

This was answered quite well in previous question 988228

Dave
+1  A: 

using json.loads - may be faster

Oduvan
actually, json.loads
hasen j
+2  A: 

This is best if you're on Python 2.6+, as it's not subject to the security holes in eval.

import ast

s = """{'key1':'value1','key2':'value2'}"""
d = ast.literal_eval(s)
FogleBird
You messed up the quotes. Use double quotes for the outside ones.
Chris Lutz
+1  A: 

Where are you getting this string from? Is it in JSON format? or python dictionary format? or just some ad-hoc format that happens to be similar to python dictionaries?

If it's JSON, or if it's only a dict, and only contains strings and/or numbers, you can use json.loads, it's the most safe option as it simply can't parse python code.

This approach has some shortcomings though, if for instance, the strings are enclosed in single quotes ' instead of double quotes ", not to mention that it only parses json objects/arrays, which only coincidentally happen to share similar syntax with pythons dicts/arrays.

Though I think it's likely the string you're getting is intended to be in JSON format. I make this assumption because it's a common format for data exchange.

hasen j