将每列作为自己的列表

时间:2015-03-25 04:02:44

标签: python list csv

使用csv,目标是为csv中的每一列创建一个列表,忽略第一行,即标题行。

 var_a        var_b
   a            1
   b            2
   c            3

listA = [var_a] = ['a','b','c']
listB = [var_b] = [1,2,3]

现在,我唯一的解决方案是创建一个空列表并按位置迭代csv位置并将其附加到这些空列表。

3 个答案:

答案 0 :(得分:1)

如果你有足够的记忆力,你可以更优雅:

with open('the.csv') as f:
    next(f)
    list_of_rows = list(csv.reader(f))

listA = [row[0] for row in list_of_rows]
listB = [int(row[1]) for row in list_of_rows]

但它与你现在所做的事情并没有太大的不同 - 只是更优雅。

(在你的例子中,第二列以某种方式给出了int的列表,而第一列给出了str的列表 - 没有黑魔法可以做 ,要么,所以我明确地使用了int所需的地方。

答案 1 :(得分:0)

您是否查看了python附带的csv工具?这些可以帮助缩小代码。

此外,就复杂性而言,迭代每个元素是您可以做的最好的事情。如果它更容易,您可以尝试将所有内容加载到矩阵中

both = [[a, 1], [b, 2], [c, 3]]

(这是python的csv工具自然会为你做的)和转置

z = list (zip (*both))
listA = list (z[0]) # zip gives a tuple, make a list so you can edit
listB = list (z[1])

答案 2 :(得分:0)

您可以使用dict reader并按标题创建列表:

import csv

result={}
with open(fn) as f:
    for line in csv.DictReader(f, delimiter='\t'):
        for k in line:
            result.setdefault(k, []).append(line[k].strip())

print result

打印:

{'var_a': ['a', 'b', 'c'], 'var_b': ['1', '2', '3']}