Python: das Schreiben von Verschachtelten Dictionary CSV
Ich versuche zu schreiben ein verschachteltes dictionary ein .csv-Datei. Hier ist ein einfaches Beispiel:
import csv
import itertools
fields = [ 'org', '2015', '2014', '2013' ]
dw = { 'orgname1': { '2015' : 2, '2014' : 1, '2013' : 1 },
'orgname2': { '2015' : 1, '2014' : 2, '2013' : 3 },
'orgname3': { '2015' : 1, '2014' : 3, '2013' : 1 }
}
with open("test_output.csv", "wb") as f:
w = csv.writer( f )
years = dw.values()[0].keys()
for key in dw.keys():
w.writerow([key, [dw[key][year] for year in years]])
Diese bekommt von mir eine Tabelle mit zwei Spalten: die erste enthält orgname
; die zweite enthält [2, 1, 1] (oder die entsprechenden Werte aus der sub-dictionary). Ich möchte eine Tabelle mit vier Spalten: eine für orgname
und dann drei für die entsprechenden Listen-Elemente.
dicts nicht haben, um, so dass Sie in Schwierigkeiten sind, sofort
vereinbart. Aber seine Tasten scheinen zu Folgen lexographic um. Also, er könnte es noch schaffen Arbeit durch die Sortierung der dw.Tasten() und dann iteriert.
vereinbart. Aber seine Tasten scheinen zu Folgen lexographic um. Also, er könnte es noch schaffen Arbeit durch die Sortierung der dw.Tasten() und dann iteriert.
InformationsquelleAutor Zack | 2015-04-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern:
:
Sonst, Sie versuchen, etwas zu schreiben, wie
[orgname1, [2, 1, 1]]
zu der csv-Datei, während Sie meinen[orgname1, 2, 1, 1]
.Als Padraic erwähnt, die Sie möglicherweise ändern möchten
years = dw.values()[0].keys()
zuyears = sorted(dw.values()[0].keys())
oderyears = fields[1:]
zu vermeiden, zufälliges Verhalten.Ja, aber das wäre einfach kopieren jetzt.
InformationsquelleAutor matsjoyce
Dieser sieht aus wie ein job für
DictWriter
:InformationsquelleAutor Robᵩ
Alternative Implementierung mit DictWriter und mit Header
Ausgabe:
dw
durch seine Schlüssel, da in der Ausgabe die Reihenfolge der orgnames geändert hat vom Eingang. mitsorted(dw.items())
behebt diesesLiebe Python-3-Benutzer, die nicht wollen, in Verlegenheit zu bringen, sich stundenlang auf diese, wie ich soeben getan hat, als alle Sie tun müssen ist, schalten Sie einfach
open("test_output.csv", "wb")
füropen("test_output.csv", "w", newline='')
und die oben genannte Lösung funktioniert einwandfrei. Sie erhalten einea bytes-like object is required, not 'str' when writing to a file'
sonst. Lassen Sie sich nicht von nana und versuchen zu codieren Ihre ganze Wörterbuch inascii
wie mich.InformationsquelleAutor Łukasz Rogalski
Mit DictWriter gibt es keine Notwendigkeit bei der Sortierung der Felder im Voraus, da
w.writerow()
gewährleisten die richtige Reihenfolge. Aber macht es Sinn, die Elemente Sortieren sich.So setzen alle zusammen, die oben genannten Vorschläge und Auswahl der besten jedes, ich würde kommen mit folgenden code:
habe ich noch eine kleine
mergedict()
Funktion, die macht es ein Einzeiler weiter unten.InformationsquelleAutor hexerei software