Python csv +默认dict与多维度

时间:2017-01-03 12:18:48

标签: python python-2.7 python-3.x csv numpy

我有一个python默认dict,如下面的结果所示。我需要在csv文件中打印它们,如所需的输出所示。

print(result_fruit)
defaultdict(<class 'collections.Counter'>,
            {   'word': Counter({   'Tom_success': 5,
                                     'Jerry_Success': 4}),
                'pdf': Counter({   'Tom_success': 1,
                                   'Jerry_success': 3}),
                })

csv中的所需输出:

mime    Tom_success Jerry_success
word      5            4
pdf       1            3

我的csv中的输出被破坏,光标没有进入下一列:

mime                    Tom_success     Jerry_success
word                  
5
4  
pdf 
1
3

我的代码:

with open('output.csv', 'w') as f:
    writer = csv.writer(f,delimiter =',')
    writer.writerow( ('mime','Tom_success','Jerry_success') )
    for mime in result_fruit:
        f.write('{}\n'.format(mime))
        for category_success in sorted(result_fruit[mime]):
                writer.writerow('{}'.format(result_fruit[mime][category_success]))

2 个答案:

答案 0 :(得分:2)

对于每行输出,只需调用.writerow()一次。传递.writerow()该行中项目的列表或元组。

试试这个:

with open('output.csv', 'w') as f:
    writer = csv.writer(f, delimiter=',')
    writer.writerow(('mime', 'Tom_success', 'Jerry_success'))
    for mime, data in result_fruit.items():
        writer.writerow([mime, data['Tom_success'], data['Jerry_success']])

或者,您可以使用csv.Dictwriter。再次,为每行输出调用.writerow()一次。

with open('output.csv', 'w') as f:
    writer = csv.DictWriter(f, ['mime', 'Tom_success', 'Jerry_success'])
    writer.writeheader()
    for mime, data in result_fruit.items():
        row = {'mime': mime}
        row.update(data)
        writer.writerow(row)

答案 1 :(得分:0)

您告诉它将密钥和元素写在不同的行上

for mime in result_fruit:
    f.write('{}\n'.format(mime))

    # writes the key, and \n

    for category_success in sorted(result_fruit[mime]):
            writer.writerow('{}'.format(result_fruit[mime][category_success]))

       # does a writerow for each element of the list.

等效动作,带有常规字典和打印

In [200]: dd = {'word': [5,4], 'pdf':[1,3]}
In [201]: for key in dd:
     ...:     print(key)
     ...:     for v in dd[key]:
     ...:         print(v)
     ...:         
word
5
4
pdf
1
3

你想要一个更像这样的文件写:

In [205]: for key in dd:
     ...:     print(key, end='\t')
     ...:     for v in dd[key]:
     ...:         print(v, end='\t')
     ...:     print()
     ...:     
word    5   4   
pdf     1   3

您甚至可以坚持使用print功能并添加file参数。

我没有足够使用csv模块来建议直接解决方案。