2

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?

unutbu
  • 842,883
  • 184
  • 1,785
  • 1,677
user140736
  • 1,913
  • 9
  • 32
  • 53
  • What? Why not save the dict as a dict instead of creating a string in the first place? Please provide some more context on this. The question makes very little sense and indicated far larger and deeper problems may have lead to this. – S.Lott Oct 18 '09 at 19:59
  • 3
    As pointed out by Dave, http://stackoverflow.com/questions/988228/converting-a-string-to-dictionary is an exact duplicate of this – dbr Oct 18 '09 at 23:56
  • This was answered quite well in previous question [988228](http://stackoverflow.com/questions/988228/) – Dave Oct 18 '09 at 16:56

4 Answers4

6

astr is a string which is "in the form of a dict". ast.literal_eval converts it to a python dict object.

In [110]: import ast

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

In [113]: ast.literal_eval(astr)
Out[113]: {'key1': 'value1', 'key2': 'value2'}
unutbu
  • 842,883
  • 184
  • 1,785
  • 1,677
4

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)
dbr
  • 165,801
  • 69
  • 278
  • 343
FogleBird
  • 74,300
  • 25
  • 125
  • 131
1

using json.loads - may be faster

Oduvan
  • 2,607
  • 3
  • 24
  • 24
1

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
  • 161,647
  • 65
  • 194
  • 231