用于从csv字符串创建列表的最短Python解决方案

时间:2014-02-25 20:30:51

标签: python

给出这样的字符串:

data ="\n
random stuff\n
a,1\n
b,2\n
c,3\n
...
"

我想仅使用带逗号的行从此字符串创建列表。我知道我可以使用以下代码创建一个列表:

l = [line for line in csv.reader(data.split('\n'))]

这会给我[[],['some stuff'],['a',1] ...]

但我真正想要的是这样的:

#this code is wrong
l = [line if len(line)>1 for line in csv.reader(data.split('\n')]

获取如下列表:[['a',1],['b',2]...]

我主要是寻找最短的解决方案,因为我知道如何以艰难的方式去做(通过迭代列表[[],['some stuff'],['a',1]...]并从中删除元素)。

谢谢,

3 个答案:

答案 0 :(得分:2)

你走了:

[line for line in csv.reader(data.split('\n')) if len(line) > 1]

这正是您的逻辑,只需输入正确的语法,最后使用if。这将为您提供所需的结果:

>>> data ="\n random stuff\na,1\nb,2\nc,3\n ... "
>>> [line for line in csv.reader(data.split('\n')) if len(line) > 1]
[['a', '1'], ['b', '2'], ['c', '3']]

<强>更新

如果你真的想要将数组中的第二个元素解析为整数,你可以像这样写:

>>> [[x[0], int(x[1])] for x in csv.reader(data.split('\n')) if len(x) > 1]
[['a', 1], ['b', 2], ['c', 3]]

答案 1 :(得分:1)

这应该可以解决问题:

>>> data ="\n random stuff\n a,1\n b,2\n c,3\n ... "
>>> [line.split(',') for line in data.split('\n') if ',' in line]
[[' a', '1'], [' b', '2'], [' c', '3']]

基本上,你在\n上拆分,忽略没有逗号if条件的每一行,然后用找到的逗号分割每个结果。

答案 2 :(得分:1)

目前的答案是不必要地测试len(line),或者不必要地测试',' in line

这是最短的解决方案:

[line for line in csv.reader(data.split("\n")) if line]

虽然如果你只想要包含多个元素的元素,',' in line是一个不错的方法。