2016-05-13 2 views
2

Ich habe einen dict wie folgt aus:schreiben dict in eine CSV-Datei auf der rechten Seite, um

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

und ich möchte ein csv wie

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

ich mit for Schleifen versuchen, aber ein don‘ t succed, um die Werte in der richtigen Reihenfolge zu schreiben.

+2

Verwenden einen 'ordereddict', eine 'Taste dict's ist von Natur aus nicht in der gleichen Reihenfolge angeordnet, daß die Tasten ausgebildet sind, oder die Schlüssel sortiert werden und über die Tasten iterieren, um den Inhalt in der gewünschten Reihenfolge zu erhalten – EdChum

Antwort

2

Sth. wie dies funktionieren soll:

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

Es gibt mir eine Fehlermeldung: 'TypeError: 'str' unterstützt die Pufferschnittstelle nicht –

0

Der Schlüssel hier ist

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

in eine Liste von Zeilen zu verwandeln:

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

Wir wissen, dass dieser Ausdruck eine Liste der Spalten erhalten wird:

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

Wenn wir sie zippen zusammen, dann bekommen wir, was wir wollen:

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

Damit können wir die Daten in die CSV-Datei schreiben. Dass sie alle zusammen:

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

Wenn Sie pandas verwenden, wird es super einfach zu CSV-Datei zu schreiben.

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) 
Verwandte Themen