Python 将每列作为自己的列表
对于csv,目标是为csv中的每一列创建一个列表,忽略第一行,即标题行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
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']}
这不是一个可行的解决办法吗?