import csv
d={'a':[1,3,4],'b':[2,3,4],'c':[1]}
with open("result.csv","w") as csv_file:
csv_writer = csv.writer(csv_file,dialect='excel')
csv_writer.writerows(d.items())
需要获得如下输出:
a 1 3 4 b 2 3 4 c 1
答案 0 :(得分:1)
您需要迭代输入字典;你现在没有输入行。
对于输入词典中的每个键值对,您有多行。第一行包含键和第一个值,然后第一行包含剩余值的更多行,第一列为空。
您需要明确地写下这些行:
csv_writer = csv.writer(csv_file, dialect='excel')
for key, values in d.items():
csv_writer.writerow((key, values[0]))
csv_writer.writerows([(None, value) for value in values[1:]])
我使用None
作为空列值,导致输出中出现空列:
>>> import csv
>>> from io import StringIO
>>> output = StringIO()
>>> d = {'a': [1, 3, 4], 'b': [2, 3, 4], 'c': [1]}
>>> csv_writer = csv.writer(output, dialect='excel')
>>> for key, values in d.items():
... csv_writer.writerow((key, values[0]))
... csv_writer.writerows([(None, value) for value in values[1:]])
...
5
5
5
>>> print(output.getvalue())
a,1
,3
,4
b,2
,3
,4
c,1
您可能希望向sorted()
循环添加d.items()
次调用;否则你的输出将按照字典顺序,arbitrary based on insertion and deletion history,至少在Python 3.6之前。
答案 1 :(得分:1)
首先你需要对键进行排序以得到a,b,c ......(在python 3.6之前,dicts不会被排序)
然后你必须发出元组,而不是原始的dicts。我建议使用带有空填充值的itertools.zip_longest
来交换密钥和密钥。价值观一起:
import csv,itertools
d={'a':[1,3,4],'b':[2,3,4],'c':[1]}
with open("result.csv","w",newline="") as csv_file:
csv_writer = csv.writer(csv_file,dialect='excel',delimiter=",") # or ";"
for k,v in sorted(d.items()):
csv_writer.writerows(itertools.zip_longest([k],v,fillvalue=""))
创建以下原始格式:
a,1
,3
,4
b,2
,3
,4
c,1
如果您需要合并的单元格,只需使用换行符连接整数值:
csv_writer.writerows([k,"\n".join(map(str,v))] for k,v in sorted(d.items()))
输出:
a,"1
3
4"
b,"2
3
4"
c,1
excel中的(您可能希望将分隔符更改为“;”,具体取决于版本)