我有一个字典,其中每个键都有列表作为值。问题是,每个列表的元素数量对于每个键是不同的。我没有使用csv写为Rows,而是将它们写在列中。可以说字典的格式如下:
myDict = {'cli1':['9','1'], 'cli2':['6','8','4'], 'cli3':['7']}
我想以下列方式打印.csv文件:
cli1 cli2 cli3
9 6 7
1 8
4
我编写了以下程序来完成任务:
with open('PduDictOut.csv','wb') as file:
writer = csv.writer(file, delimiter='\t')
writer.writerow(myDict.keys())
for row in zip(*myDict.values()):
writer.writerow(list(row))
file.close()
但是这个程序给了我以下输出:
cli1 cli2 cli3
9 6 7
我的程序正在使用其列表中项目数量最少的密钥,并为所有密钥提供相同数量的元素。如何更改程序以生成我想要的输出。提前致谢。非常感谢帮助。顺便说一下,我使用的是Python 2.6。
答案 0 :(得分:3)
由于第三个列表只有一个项目,zip
会将结果截断为一个元组。
使用填充值代替itertools.izip_longest
:
from itertools import izip_longest
for row in izip_longest(*myDict.values(), fillvalue=''):
...
答案 1 :(得分:1)
您可以使用:
myDict = {'cli1':['9','1'], 'cli2':['6','8','4'], 'cli3':['7']}
values = map(None, *myDict.values())
输出:[('6', '7', '9'), ('8', None, '1'), ('4', None, None)]
在将其写入csv时更改逻辑位以处理None。