2016-05-13 13 views
2

上のCSVファイルへのdictを書く私はこのような辞書があります。正しい順序

{ 
'col1': [1, 2, 3], 
'col2': [4, 5, 6], 
'col3' : [7, 8, 9] 
} 

をし、私はforループを試みるが、ドン」

col1;col2;col3 
1;4;7 
2;5;8 
3;6;9 

のようなCSVをしたいです正しい順序で値を書き込むようにしました。

+2

'dict'sキーは、本質的にキーが構築されているのと同じ順序で並べられ、またはキーをソートし、所望の順序で内容を取得するためのキーを反復されていない、' ordereddict'を使用 – EdChum

答えて

2

Sth。このように動作するはずです:

import csv 

d = {...} 
with open('file.csv', 'wb') as f: 
    writer = csv.writer(f, delimiter=';') 

    header = ['col1', 'col2', 'col3'] 
    # header = sorted(d.keys()[, key=custom_order_fnc]) 
    rows = zip(*[d[col] for col in header]) 

    writer.writerow(header) 
    for row in row: 
     writer.writerow(row) 
+0

'TypeError: 'str'はバッファインターフェイスをサポートしていません。 –

0

をここで重要なのは、行のリストに

data = { 
'col1': [1, 2, 3], 
'col2': [4, 5, 6], 
'col3' : [7, 8, 9] 
} 

を変換することです:

[(1, 4, 7), (2, 5, 8), (3, 6, 9)] 

私たちは、この式は列のリストを取得することを知っています:

header = ['col1', 'col2', 'col3'] 
[data[h] for h in header] # [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 

私たちが望むものを得ることができます:

zip(*(data[h] for h in header)) # [(1, 4, 7), (2, 5, 8), (3, 6, 9)] 

これで、データをCSVファイルに書き込むことができます。すべて一緒にそれを置く:

import csv 

data = { 
'col1': [1, 2, 3], 
'col2': [4, 5, 6], 
'col3' : [7, 8, 9] 
} 

header = ['col1', 'col2', 'col3'] 
with open('dict_to_csv_in_order.csv', 'wb') as f: 
    writer = csv.writer(f) 
    writer.writerow(header) 
    writer.writerows(zip(*(data[h] for h in header))) 
0

をおpandasを使用する場合は、CSVファイルへの書き込みが超簡単になります。

import pandas as pd 
data = { 
    'col1': [1, 2, 3], 
    'col2': [4, 5, 6], 
    'col3' : [7, 8, 9] 
} 
df = pd.DataFrame(data, columns=['col1', 'col2', 'col3']) 
df.to_csv('csv_file.csv', sep=';', index=False) 
関連する問題