Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert a String representation of a Dictionary to a dictionary?

How can I convert the str representation of a dict, such as the following string, into a dict?

s = "{'muffin' : 'lolz', 'foo' : 'kitty'}" 

I prefer not to use eval. What else can I use?

The main reason for this, is one of my coworkers classes he wrote, converts all input into strings. I'm not in the mood to go and modify his classes, to deal with this issue.

like image 483
UberJumper Avatar asked Jun 12 '09 18:06

UberJumper


People also ask

How do you convert a string to a dictionary?

Method 1: Splitting a string to generate key:value pair of the dictionary In this approach, the given string will be analysed and with the use of split() method, the string will be split in such a way that it generates the key:value pair for the creation of a dictionary. Below is the implementation of the approach.

How do you convert a string representation to a dictionary in Python?

To convert a string to dictionary, we have to ensure that the string contains a valid representation of dictionary. This can be done by eval() function. Abstract Syntax Tree (ast) module of Python has literal_eval() method which safely evaluates valid Python literal structure.

Can you put a string in a dictionary Python?

In Python, the string is converted into a dictionary by the use of json. load () function. It is the built-in function. We must import this library by utilizing the “import” word before this function.


1 Answers

You can use the built-in ast.literal_eval:

>>> import ast >>> ast.literal_eval("{'muffin' : 'lolz', 'foo' : 'kitty'}") {'muffin': 'lolz', 'foo': 'kitty'} 

This is safer than using eval. As its own docs say:

 >>> help(ast.literal_eval) Help on function literal_eval in module ast:  literal_eval(node_or_string)     Safely evaluate an expression node or a string containing a Python     expression.  The string or node provided may only consist of the following     Python literal structures: strings, numbers, tuples, lists, dicts, booleans,     and None. 

For example:

>>> eval("shutil.rmtree('mongo')") Traceback (most recent call last):   File "<stdin>", line 1, in <module>   File "<string>", line 1, in <module>   File "/opt/Python-2.6.1/lib/python2.6/shutil.py", line 208, in rmtree     onerror(os.listdir, path, sys.exc_info())   File "/opt/Python-2.6.1/lib/python2.6/shutil.py", line 206, in rmtree     names = os.listdir(path) OSError: [Errno 2] No such file or directory: 'mongo' >>> ast.literal_eval("shutil.rmtree('mongo')") Traceback (most recent call last):   File "<stdin>", line 1, in <module>   File "/opt/Python-2.6.1/lib/python2.6/ast.py", line 68, in literal_eval     return _convert(node_or_string)   File "/opt/Python-2.6.1/lib/python2.6/ast.py", line 67, in _convert     raise ValueError('malformed string') ValueError: malformed string 
like image 177
Jacob Gabrielson Avatar answered Oct 13 '22 01:10

Jacob Gabrielson