我想知道最简单的方法是将如下列表的字符串表示转换为列表:
x = '[ "A","B","C" , " D"]'
即使在用户在逗号之间加空格,在引号内加空格的情况下,我也需要处理它并将其转换为:
x = ["A", "B", "C", "D"]
我知道我可以用strip()和split()分隔空格,并检查非字母字符。但代码变得非常笨拙。有没有我不知道的快速功能?
我想知道最简单的方法是将如下列表的字符串表示转换为列表:
x = '[ "A","B","C" , " D"]'
即使在用户在逗号之间加空格,在引号内加空格的情况下,我也需要处理它并将其转换为:
x = ["A", "B", "C", "D"]
我知道我可以用strip()和split()分隔空格,并检查非字母字符。但代码变得非常笨拙。有没有我不知道的快速功能?
当前回答
在处理存储为Pandas DataFrame的报废数据时,可能会遇到这样的问题。
如果值列表以文本形式显示,则此解决方案非常有用。
def textToList(hashtags):
return hashtags.strip('[]').replace('\'', '').replace(' ', '').split(',')
hashtags = "[ 'A','B','C' , ' D']"
hashtags = textToList(hashtags)
Output: ['A', 'B', 'C', 'D']
不需要外部库。
其他回答
当您将存储为字符串的列表加载到CSV时,通常会发生这种情况
如果您的列表以CSV格式存储,如OP所问:
x = '[ "A","B","C" , " D"]'
以下是如何将其加载回列表:
import csv
with open('YourCSVFile.csv') as csv_file:
reader = csv.reader(csv_file, delimiter=',')
rows = list(reader)
listItems = rows[0]
listItems现在是列表
为了使用JSON进一步完成Ryan的回答,一个非常方便的Unicode转换函数就在这个答案中。
带双引号或单引号的示例:
>print byteify(json.loads(u'[ "A","B","C" , " D"]')
>print byteify(json.loads(u"[ 'A','B','C' , ' D']".replace('\'','"')))
['A', 'B', 'C', ' D']
['A', 'B', 'C', ' D']
只需从列表的字符串表示形式中切下第一个和最后一个字符,即可保存.strip()函数(请参见下面的第三行):
>>> mylist=[1,2,3,4,5,'baloney','alfalfa']
>>> strlist=str(mylist)
['1', ' 2', ' 3', ' 4', ' 5', " 'baloney'", " 'alfalfa'"]
>>> mylistfromstring=(strlist[1:-1].split(', '))
>>> mylistfromstring[3]
'4'
>>> for entry in mylistfromstring:
... print(entry)
... type(entry)
...
1
<class 'str'>
2
<class 'str'>
3
<class 'str'>
4
<class 'str'>
5
<class 'str'>
'baloney'
<class 'str'>
'alfalfa'
<class 'str'>
我想用正则表达式提供一个更直观的模式化解决方案。下面的函数将包含任意字符串的字符串化列表作为输入。
逐步解释:您删除了所有的白间距、括号和value_separator(如果它们不是要提取的值的一部分,否则会使正则表达式更复杂)。然后将清理后的字符串拆分为单引号或双引号,并取非空值(或奇数索引值,无论首选项如何)。
def parse_strlist(sl):
import re
clean = re.sub("[\[\],\s]","",sl)
splitted = re.split("[\'\"]",clean)
values_only = [s for s in splitted if s != '']
return values_only
测试样本:“['21',”foo“'6','0',”A“]”
如果它只是一个一维列表,则可以在不导入任何内容的情况下完成此操作:
>>> x = u'[ "A","B","C" , " D"]'
>>> ls = x.strip('[]').replace('"', '').replace(' ', '').split(',')
>>> ls
['A', 'B', 'C', 'D']