1

我有一个字典,其中每个键都有列表作为值。问题是,每个列表的元素数量对于每个键都是不同的。我没有将它们写成使用 csv 的行,而是将它们写成列。假设字典的格式如下:

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。

4

2 回答 2

3

由于第三个列表只有一项,zip因此会将结果截断为一个元组。

改为使用itertools.izip_longest填充值:

from itertools import izip_longest

for row in izip_longest(*myDict.values(), fillvalue=''):
    ...
于 2013-07-29T04:34:17.877 回答
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 时处理无。

于 2013-07-29T04:43:31.733 回答