2017-01-03 11 views
0

私は以下の結果に示すように、Pythonのデフォルトdictを持っています。私は希望の出力に示されているようにCSVファイルでそれらを印刷する必要があります。多次元のPython csv + defult dict

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

CSVで所望の出力:

CSVでの私の出力が壊れていると、カーソルが次の列に移動しない
mime Tom_success Jerry_success 
word  5   4 
pdf  1   3 

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()を1回呼び出します。

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モジュールを使用して、その直接的な解決策を示唆することはありません。