将列表字符串转换为 Python 中的列表列表
Convert string of lists into list of lists in Python
我正在尝试将作为字符串传递的列表列表转换为 python-3.7.5
中的嵌套列表,但我遗漏了一些东西。我尝试了 ast
,但它似乎引发了编码错误。
示例:
#!/usr/bin/env python
import ast
sample="[1abcd245,2bcdasdf,3jakdshfkh234234],[234asdfmnkk234]"
print(ast.literal_eval(sample))
ERROR:
return compile(source, filename, mode, PyCF_ONLY_AST)
File "<unknown>", line 1
[1abcd245,2bcdasdf,3jakdshfkh234234],[234asdfmnkk234]
Required output:
[[1abcd245,2bcdasdf,3jakdshfkh234234],[234asdfmnkk234]]
有什么建议吗?
我认为问题在于 literal_eval
无法解析您提供的 sample
中的字符串。我能够通过添加一个三重引号来包围示例字符串、为列表中的每个字符串添加引号并添加一组额外的括号来获得您想要的输出:
import ast
sample="""[["1abcd245","2bcdasdf","3jakdshfkh234234"],["234asdfmnkk234"]]"""
print(ast.literal_eval(sample))
如果您无法更改输入,我建议使用 json
库:
import json
json.loads(sample)
哪个在我的机器上得到了想要的结果!
您可以在此处使用 eval()
函数,对您的起始字符串进行两处更改后:
- 用双引号将每个列表项括起来
- 将整个输入包装在
[...]
中,使其成为正式的二维列表
sample = "[1abcd245,2bcdasdf,3jakdshfkh234234],[234asdfmnkk234]"
sample = '[' + re.sub(r'(\w+)', r'""', sample) + ']'
list = eval(sample)
print(list)
这会打印:
[['1abcd245', '2bcdasdf', '3jakdshfkh234234'], ['234asdfmnkk234']]
你可以试试这个:
sample="[1abcd245,2bcdasdf,3jakdshfkh234234],[234asdfmnkk234]"
l1 = []
for item in sample.split(","):
if item.startswith('['):
l1.append([])
l1[-1].append(item[1:])
elif item.endswith(']'):
l1[-1].append(item[:-2])
else:
l1[-1].append(item)
print(l1)
我正在尝试将作为字符串传递的列表列表转换为 python-3.7.5
中的嵌套列表,但我遗漏了一些东西。我尝试了 ast
,但它似乎引发了编码错误。
示例:
#!/usr/bin/env python
import ast
sample="[1abcd245,2bcdasdf,3jakdshfkh234234],[234asdfmnkk234]"
print(ast.literal_eval(sample))
ERROR:
return compile(source, filename, mode, PyCF_ONLY_AST)
File "<unknown>", line 1
[1abcd245,2bcdasdf,3jakdshfkh234234],[234asdfmnkk234]
Required output:
[[1abcd245,2bcdasdf,3jakdshfkh234234],[234asdfmnkk234]]
有什么建议吗?
我认为问题在于 literal_eval
无法解析您提供的 sample
中的字符串。我能够通过添加一个三重引号来包围示例字符串、为列表中的每个字符串添加引号并添加一组额外的括号来获得您想要的输出:
import ast
sample="""[["1abcd245","2bcdasdf","3jakdshfkh234234"],["234asdfmnkk234"]]"""
print(ast.literal_eval(sample))
如果您无法更改输入,我建议使用 json
库:
import json
json.loads(sample)
哪个在我的机器上得到了想要的结果!
您可以在此处使用 eval()
函数,对您的起始字符串进行两处更改后:
- 用双引号将每个列表项括起来
- 将整个输入包装在
[...]
中,使其成为正式的二维列表
sample = "[1abcd245,2bcdasdf,3jakdshfkh234234],[234asdfmnkk234]"
sample = '[' + re.sub(r'(\w+)', r'""', sample) + ']'
list = eval(sample)
print(list)
这会打印:
[['1abcd245', '2bcdasdf', '3jakdshfkh234234'], ['234asdfmnkk234']]
你可以试试这个:
sample="[1abcd245,2bcdasdf,3jakdshfkh234234],[234asdfmnkk234]"
l1 = []
for item in sample.split(","):
if item.startswith('['):
l1.append([])
l1[-1].append(item[1:])
elif item.endswith(']'):
l1[-1].append(item[:-2])
else:
l1[-1].append(item)
print(l1)