从Python中的字符串创建列表列表

2024-05-16 02:52:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串如下所示:

str = "[abc,7.56],[dfe,2.44],[iij,2.31]"

我希望它是一个列表:

ls = [["abc",7.56],["dfe",2.44],["iij",2.31]]

我试图使用list(str.split(",")),但随后它在列表内部和列表之间都被拆分。此外,列表将包含六个元素(不是列表),而不是三个。我应该如何进行


Tags: 字符串元素列表lslistsplitabcstr
3条回答

如果模式没有如评论中所要求的那样发生剧烈变化,则有三个步骤:

  1. 通过正则表达式查找每个列表的内容
  2. ,上拆分内容
  3. 将第二个元素转换为数字
import re

s = "[abc,7.56],[dfe,2.44],[iij,2.31]"
list_contents = re.findall(r"\[(.+?)\]", s)  # non-greedily take what are between [..]
split_as_strings = [content.split(",") for content in list_contents]
result = [[pair[0], float(pair[1])] for pair in split_as_strings]

result将是

[['abc', 7.56], ['dfe', 2.44], ['iij', 2.31]]

和中间结果:

list_contents == ['abc,7.56', 'dfe,2.44', 'iij,2.31']

split_as_strings == [['abc', '7.56'], ['dfe', '2.44'], ['iij', '2.31']]

如果您想要列表的列表,请使用append

listoflists = []
listoflists.append(str)

你正在做的是解析。这一点都不微不足道:很多边缘案例等等

您的输入看起来确实像JSON的某种方言,这是一种非常有名的数据格式,可以这样解析:

ls = json.loads('[["a", 1], ["b", 2]]')
assert ls == [["a", 1], ["b", 2]]

如果需要的话,不要尝试构建自己的解析器,而是看看https://tomassetti.me/parsing-in-python/中枚举的解析库

相关问题 更多 >