您可以在单独的数据结构中收集标题和行,然后使用csv模块将所有内容写入Excel工作表.同样,数据字典需要转换为OrderedDict以保持顺序.
源代码
import numpy as np
import csv
from collections import OrderedDict
from itertools import chain
data = {}
testdata = np.array([1,2,3,4,5])
data = OrderedDict(data)
a = {'a': testdata, 'b': testdata, 'c': testdata}
b = {'a2': testdata, 'b2': testdata, 'c2': testdata}
c = {'a3': testdata, 'b3': testdata, 'c3': testdata}
#covert inner dict to OrderedDict
data['set1'] = OrderedDict(sorted(a.items(), key=lambda x:x[0]))
data['set2'] = OrderedDict(sorted(b.items(), key=lambda x:x[0]))
data['set3'] = OrderedDict(sorted(c.items(), key=lambda x:x[0]))
#collect second header
header2 = [data.get(k).keys() for k in data.keys()]
#get number of repetations for header1
header1_size = len(header2[0])
#get header1
header1 = sorted((data.keys())*header1_size)
#flatten list of list of header2
header2 = list(chain.from_iterable(header2))
#get rows from data dict
rows = zip(*[v2 for k1,v1 in data.items() for k2,v2 in v1.items() ])
#write header1,header2 and rows to excel /csv
with open('csvfile.csv','wb') as ofile:
wr = csv.writer(ofile, dialect='excel')
wr.writerow(header1)
wr.writerow(header2)
wr.writerows(rows)
csvfile