当字符串实际上是一个列表时,将整个字符串转换为列表

时间:2013-11-27 13:49:58

标签: python string list

我有一个非常奇怪的问题......我的数据集实际上有一些列表 字符串。反正有没有让他们再次列出?

例如我有一个字符串b,如

In [47]: b    
Out[47]: "['right', 'wrong']"

但我只想['正确','错''),我该怎么做?

我试过

In [48]:list(b)    
Out[48]: ['[',"'",'r','i','g','h','t',"'",',',' ',"'",'w','r','o','n','g',"'",']']

这是正常的,因为如果列表应用于字符串....它将它分开。我知道 但我不知道如何将它们转换回列表。

非常感谢,如果有人可以提供帮助......

我也尝试过join().....这可能是愚蠢的....但我真的想不出来 一个简单的方法。这可能是一个非常愚蠢的问题。但非常感谢

2 个答案:

答案 0 :(得分:5)

我不知道你为什么在字符串中有一个列表(似乎不是一个好主意),但你可以使用ast.literal_eval()来获取一个列表:

>>> import ast
>>> s = "['right', 'wrong']"
>>> ast.literal_eval(s)
['right', 'wrong']

请注意,这仅适用于某些事项:字符串,数字,元组,列表,字符串,布尔值和None
但严肃地说,你甚至不应该为其他类型的价值观做这件事。

答案 1 :(得分:3)

一种简单,愚蠢的方式,但如果你知道自己在做什么,那就很好了:

new_list = eval(b)

eval会将字符串视为表达式,并可能会执行一些有害的操作。一个人可能不小心,或者没有把代码放在字符串里面,而bam!你的程序很乱。跟踪由eval引起的错误也非常困难,这就是为什么你应该避免它。

有一种安全的方法,使用ast.literal_eval

import ast
new_list = ast.literal_eval(b)

只将它作为一个对象进行评估,你不能在其中加入代码。

DIY方式是剥离和分割它:

>>> c = [s.strip(" '") for s in b.strip("[]").split(',')]
>>> c
['right', 'wrong']