2012-08-14 61 views
2

我正在为每个数据项创建列表,我有以下数据结构,并且在迭代结束时有6个包含数据点的列表。每个列表具有相同的长度,我想生成每个列表以csv文件的列Python:将单个列表写入csv中的列

例子:

columnOfList1, columnOfList2... 

这是我的代码生成多个数据列表:我不能figureout是生成csv文件。

for (fn1, lst1), (fn2, lst2) in product(dict1.iteritems(), dict2.iteritems()): 
    for vector1, vector2 in zip(lst1, lst2): 
+0

您是否在使用csv模块,写入文件或组织数据时遇到问题? – monkut 2012-08-14 02:26:06

+0

'NameError:name'product'is not defined.'(我假设你在说'itertools.product',但是请你把它放在你的问题中吗? – kojiro 2012-08-14 02:29:22

回答

4

正如您所说的,每个列表都有相同的长度。你为什么不在这个长度上做一个“for”?

例子:

for i in range(len(some_list)): 
    print lst[i], lst2[i], lst3[i], lst4[i], lst5[i] 
+0

为什么我没有想到这个:) – 2012-08-14 02:57:45

+0

好,老式的编码。我喜欢它! – philshem 2013-10-24 14:39:28

1

转换行名单只是翻译。它只是与zip完成:

>>> foo 
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]] 
>>> zip(*foo) 
[(0, 0, 0, 0, 0), (1, 1, 1, 1, 1), (2, 2, 2, 2, 2), (3, 3, 3, 3, 3), (4, 4, 4, 4, 4)] 

所以你可能只是做

>>> lsts = [l[1] for l in product(yourdicts)] 
>>> csvwriter.writerows(zip(*lsts)) 
1

您可以使用numpy.savetxt这一点。首先将阵列堆叠成列:

>>> import numpy as np 
>>> col1 = np.array([1,2,3]) 
>>> col2 = np.array([4,5,6]) 
>>> output = np.vstack((col1, col2)).T 
>>> output 
array([[1, 4], 
     [2, 5], 
     [3, 6]]) 

然后写出来。您可以传递一个文件名,但在这里我使用了StringIO来显示输出:

>>> from StringIO import StringIO 
>>> s = StringIO() 
>>> np.savetxt(s, output, delimiter=',', fmt='%.7g') 
>>> print s.getvalue() 
1,4 
2,5 
3,6