Python列表中的CSV列表

时间:2013-12-24 05:25:51

标签: python csv

我目前有一个字典,其值是列表。

示例:{1: [12, 13, 14, 15], 2: [12, 13, 14, 15], 3: [12, 13, 14, 15]}等等。

我有20000个密钥,每个列表包含80个值。

我正在尝试将其输出到CSV文件中,但使用Dictwriter却没有运气。这是我的代码的一部分:

for i in range(0, 3):

    filetxt = "\\Level_3\\" + nonsbar[i]
    filedata = list(csv.reader(open(filetxt,'rb'), delimiter='\t'));

    for j in range (1, len(filedata)):
        tempid = filedata[j][0]
        idind = tempid.index('|')
        geneid = tempid[idind+1:len(tempid)]
        genecount = filedata[j][1]
        nconn[geneid].append(genecount)


for keys in nconn.keys():
    nconn[keys] = zip(nconn[keys])

print "convert to table"
nkeys = nconn.keys()
filetxt = open('nonsmoke.csv', 'wb')
nonsmoketab = csv.DictWriter(filetxt, nkeys,delimiter=',')
nonsmoketab.writeheader()
nonsmoketab.writerow(nconn)

我得到这样的输出:

114787  114786  
[('161.00',), ('985.00',), ('68.00',)]  [('9.00',), ('19.00',), ('2.00',)]

我反而想要这个:

114787 114786   
161     9
985     19
68      2

2 个答案:

答案 0 :(得分:2)

您想要转置列表字典吗?您可以使用itertools.izip_longest执行此操作,例如:

from itertools import izip_longest
d = {1: [12, 13, 14, 15], 2: [16, 17, 18], 3: [19, 20, 21, 22]}
labels = d.keys()
rows = izip_longest(*d.values())

您可以使用csv.writer序列化回csv:

import StringIO
buf = StringIO.StringIO()
outf = csv.writer(buf)
outf.writerow(labels)
outf.writerows(rows)
print buf.getvalue()
# 1,2,3
# 12,16,19
# 13,17,20
# 14,18,21
# 15,,22

答案 1 :(得分:0)

我可以给你一个粗略的建议:从csv.DictWriter实现,覆盖方法writerow(self, rowdict)writerows(self, rowdicts),在self._dict_to_list(rowdict)(在你的情况下是它的列表)的结果上添加循环这两个功能。