Parker Hoyes
Parker Hoyes

Reputation: 2148

Python list string to list

I have a string:

s= "[7, 9, 41, [32, 67]]"

and I need to convert that string into a list:

l= [7, 9, 41, [32, 67]]

the problem is, when I use list(s) I get this:

['[', '7', ',', ' ', '9', ',', ' ', '4', '1', ',', ' ', '[', '3', '2', ',', ' ', '6', '7', ']', ']']

I am using python 3.2

Upvotes: 3

Views: 488

Answers (6)

Ryan
Ryan

Reputation: 235

why not use eval()?

>>> s = "[7, 9, 41, [32, 67]]"
>>> eval(s)
[7, 9, 41, [32, 67]]

Upvotes: 0

Shameem
Shameem

Reputation: 2814

It is another answer, But I don't suggest you.Because exec is dangerous.

>>> s= "[7, 9, 41, [32, 67]]"
>>> try:
...   exec 'l = ' + s
...   l
... except Exception as e:
...   e
[7, 9, 41, [32, 67]]

Upvotes: 0

user1446258
user1446258

Reputation:

Use: package ast: function : literal_eval(node_or_string)

http://docs.python.org/library/ast.html#module-ast

Upvotes: 0

Sven Marnach
Sven Marnach

Reputation: 601669

You can do exactly what you asked for by using ast.literal_eval():

>>> ast.literal_eval("[7, 9, 41, [32, 67]]")
[7, 9, 41, [32, 67]]

However, you probably want to use a sane serialisation format like JSON in the first place, instead of relying on the string representation of Python objects. (As a side note, the string you have might even be JSON, since the JSON representation of this particular object would look identical to the Python string representation. Since you did not mention JSON, I'm assuming this is not what you used to get this string.)

Upvotes: 4

David Robinson
David Robinson

Reputation: 78610

You want to use ast.literal_eval:

import ast
s= "[7, 9, 41, [32, 67]]"
print ast.literal_eval(s)
# [7, 9, 41, [32, 67]]

Upvotes: 2

Martijn Pieters
Martijn Pieters

Reputation: 1122012

Use the ast module, it has a handy .literal_eval() function:

import ast

l = ast.literal_eval(s)

On the python prompt:

>>> import ast
>>> s= "[7, 9, 41, [32, 67]]"
>>> ast.literal_eval(s)
[7, 9, 41, [32, 67]]

Upvotes: 2

Related Questions