Python 将每列作为自己的列表

Python 将每列作为自己的列表,python,list,csv,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位置,并将其附加到这些空列表中。如果您有足够的内存,您可以获得更多的优雅: with open('the

对于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位置,并将其附加到这些空列表中。

如果您有足够的内存,您可以获得更多的优雅:

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
s的列表,而第一列给出了
str
s的列表——也没有什么黑魔法可以做,因此我在需要的地方显式地使用了
int

您检查过python附带的工具了吗?这些可以帮助您缩减代码

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

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])

您可以使用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']}
这不是一个可行的解决办法吗?