我目前有一个字典,其值是列表。
示例:{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
答案 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)
(在你的情况下是它的列表)的结果上添加循环这两个功能。