在列中写入字典的所有值

时间:2013-07-29 04:28:42

标签: python

我有一个字典,其中每个键都有列表作为值。问题是,每个列表的元素数量对于每个键是不同的。我没有使用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。

2 个答案:

答案 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。