2016-04-11 2 views
1

Was ich versuche, ist eine CSV-Datei mit mehreren Zeilen und Spalten von Daten zu nehmen und ein geordnetes Wörterbuch zu erstellen, das ich aufrufen und später durchlaufen kann.Erstellen eines OrderedDict aus einer CSV-Datei

Dies ist, wie es aussieht, wenn ich öffnen und die CSV-Datei in meinem Python-Shell drucken:

"csv printed"

Und hier ist der Code, den ich jetzt habe und mit in der Schale spiele:

from collections import OrderedDict 

aDict = OrderedDict() 
order = next(csv.reader(file))[1:] 
file.seek(0) 
csvReader = csv.DictReader(file) 
for row in csvReader: 
    key = row.pop("key") 
    aDict[key] = OrderedDict((k, row[k]) for k in order) 

"my unworking code"

ich will es über jede Zeile zu durchlaufen und das Wörterbuch mit den Tasten sind die Daten schreiben und die Werte als eine Liste der anderen Werte in jeder Spalte.

Ex: { "1980.12.12": [28.75,28.87,28.75,28.75,2093900.0,0.0,1.0]}

+0

Ich würde vorschlagen, dass Sie den Code als Klartext in Ihrer Frage hinzufügen, so dass die Menschen kopieren und fügen Sie es ein, damit sie es ausführen und versuchen können, es zu beheben. – eestrada

Antwort

2

Ich weiß nicht, warum Sie pop Schlüssel versuchen, aus der von Wörterbuch und Gegenstände von der Liste. Es scheint nicht zu Ihrem Zweck zu dienen, eine OrderedDict zu erstellen.

Das ist die Lösung, zu der ich kam. Es gibt keine Einträge (wieder, weil ich nicht genau weiß, warum Sie das tun).

import csv 
from collections import OrderedDict 

file = open('example.csv', mode='r') 

csvReader = csv.reader(file) 

# get rid of header row 
header = next(csvReader) 
# print(header) 

odict = OrderedDict() 
for row in csvReader: 
    odict[row[0]] = row[1:] 
    # print(row) 

print(odict) 

Dies könnte saubere und wiederverwendbar sein, wenn es in eine Funktion gesetzt wird, etwa so:

import csv 
from collections import OrderedDict 

def parse_csv(filename): 

    file = open(filename, mode='r') 

    csvReader = csv.reader(file) 

    # get rid of header row 
    header = next(csvReader) 
    # print(header) 

    odict = OrderedDict() 
    for row in csvReader: 
     odict[row[0]] = row[1:] 
     # print(row) 

    return odict 

parse_csv('example.csv')