2017-01-03 60 views
0

我有一个python默认字典,如下面的结果所示。如需要的输出中所示,我需要将它们打印在csv文件中。Python csv + defult字典与多维

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])) 
+0

'f.write('{} \ n'.format(mime))'??你写入文件本身和'csv.writer'?我不认为它会解决所有问题,但似乎是错误的。 –

回答

1

对于每行输出,请拨打.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) 
0

你正在告诉它写第e键以及单独的行

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模块足以建议一个直接的解决方案。