首页 > 解决方案 > 需要在python中生成csv输出如下

问题描述

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())

需要得到如下输出:

一个 1
    3
    4
b 2
    3
    4
1

标签: pythoncsv

解决方案


您需要遍历输入字典;您在这里没有准备好的输入行。

对于输入字典中的每个键值对,您有多个 rows。第一行由键和第一个值组成,然后剩下的值有更多行,第一列为空。

您需要明确地编写这些行:

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()否则,您的输出将按字典顺序排列,这是基于插入和删除历史的任意顺序,至少在 Python 3.6 之前。


推荐阅读