2016-05-01 4 views
-1

Ich habe eine große XML-Datei, die mich gequält hat. Ich habe es geschafft, viele der Fehler in seinem Design zu umgehen, und möchte es in ein Python-Wörterbuch übertragen, um später in SQL usw. schreiben zu können. In der Zwischenzeit kann ich das Wörterbuch benutzen, um meine Aufgabe zu beenden.Zugriffswerte innerhalb dynamisch generierten Python-Wörterbuchs

Hier ist, wo das Problem in meinem Code liegt:

import os, csv 
from collections import Counter 
from pprint import pprint 

dd = {} 
x=0 
with open('transactions.csv', 'r') as f: 
    reader = csv.DictReader(f) 
    h = (reader.fieldnames) 

    for row in reader: 
     x+=1 
     for i in h: 
      dd[x] = {'date':row['Date'], 
        'amount':row[' Amount'], 
        'type':row[' Type'], 
        'note':row[' Description'] 
        } 

Die Idee ist, dass ich Datei lese (in diesem Fall eine Praxis ein) und in ein Wörterbuch Fütterung. Es gibt einen Schlüssel mit einem Eintrag wie oben. Ich kann es aufzählen und das als Index verwenden, oder ich kann es manuell zählen. Ich kann auch ein eindeutiges Feld für dd [x] verwenden. Aber was auch immer ich mache, ich kann nicht einzeln auf die Werte innerhalb des Wörterbuchs zugreifen.

Zum Beispiel wäre es toll, folgendes zu tun:

print (dd[25]['date']) 

ich jedes Mal kalt gestoppt werde. Ich würde gerne denken, dass ich auf Eintrag 25 (dd [25]) zugreifen und das Datum (dd [25] ['date']) bekommen könnte.

Alle Beispiele, die ich in verschachtelten Wörterbüchern finden kann, sind manuell erstellt und adressieren dieses Problem nicht, das ich nicht lösen kann.

Bitte beraten. Danke vielmals!

+0

Was hat das alles mit XML zu tun? Ich denke du meintest "CSV". –

Antwort

0
for row in reader: 
    x+=1 
    for i in h: 
     dd[x] = {'date':row['Date'], 
       'amount':row[' Amount'], 
       'type':row[' Type'], 
       'note':row[' Description'] 
       ...... 
       } 
     for key in dd[x].keys(): ## iterate through keys 
       print d[x][key]  
0

Für die Aufzeichnung Sie kein Wörterbuch neu erstellen müssen, sind die Zeilen bereits dicts:

import csv 

dd = {} 
with open('mycsv.csv', 'r') as f: 
    reader = csv.DictReader(f) 
    h = next(reader) 

    for x, row in enumerate(reader, 1): 
     dd[x] = row 


print(dd) 

OUTPUT

{1: {'Date': '4/30/16', 'Amount': '11.23', 'Type': '1', 'Description': 'Something 1'}, 2: {'Date': '4/30/16', 'Amount': '10.23', 'Type': '2', 'Description': 'Something 2'}, 3: {'Date': '4/30/16', 'Amount': '9.23', 'Type': '3', 'Description': 'Something 3'}, 4: {'Date': '4/30/16', 'Amount': '8.23', 'Type': '4', 'Description': 'Something 4'}} 

erwähnenswert auch, wie es scheint geeignet, stattdessen eine Liste zu verwenden, da diese normalerweise für numerische zusammenhängende indizierte Daten verwendet werden.

Verwandte Themen