2016-08-05 16 views
1

Ich versuche, ein verschachteltes Wörterbuch in Python zu CSV zu schreiben. Ich habe die csv.DictWriter-Dokumentation auf python.org und einige Beispiele hier auf stackoverflow angeschaut, aber ich kann den letzten Teil nicht herausfinden. Hier ist eine repräsentative Datensatz:Verschachtelte Wörterbuch in CSV schreiben

data = {u'feeds': [{u'feed_code': u'free', u'feed_name': u'Free'}, {u'feed_code': u'paid', u'feed_name': u'Paid'}, {u'feed_code': u'grossing', u'feed_name': u'Grossing'}], u'code': 200} 

ColTitle = ['code','feed_code','feed_name'] 
with open('test.csv','wb') as f: 
    w = csv.DictWriter(f, ColTitle) 
    w.writeheader() 
    for item in data: 
     w.writerow({field: data[item]}) ## Part I am stuck on 

Das ist, was ich meine CSV schreiben möchte Datei

code feed_code feed_name 
200 free Free 
200 paid Paid 
200 grossing Grossing 

Antwort

0

Das Problem in Ihrem Code die Schleife ist. Sie möchten alle Feeds durchlaufen, aber Sie haben tatsächlich die Daten durchlaufen. Ihr für:

for item in data: 
    print item 
    w.writerow({field: data[item]}) ## Part I am stuck on 

Dies würde Ihnen

feeds 
code 

Was Sie wollen, ist über die Feeds Schleife, etwa so:

for feed in data[u'feeds']: 
    w.writerow(feed) 

Doch ist dies nicht genug, denn Der Code ist nicht in jedem Feld, sondern nur einmal in den Daten deklariert, also sollten Sie ihn so ändern, dass er auch den Code in jeder geschriebenen Zeile enthält:

0

Dieser schwierige Teil über das, was Sie tun möchten, ist, dass die Wörterbücher in der Liste der u'feeds' in Ihrer Datenstruktur nicht den u'code' Wert in jedem von ihnen haben. Dies kann leicht behoben werden, indem jeder von ihnen aktualisiert wird, was es Ihnen ermöglicht, alle auf einmal zu schreiben (obwohl es die Datenstruktur ändert):

import csv 

data = {u'code': 200, 
     u'feeds': [{u'feed_code': u'free', u'feed_name': u'Free'}, 
        {u'feed_code': u'paid', u'feed_name': u'Paid'}, 
        {u'feed_code': u'grossing', u'feed_name': u'Grossing'}]} 

COL_TITLES = ['code', 'feed_code', 'feed_name'] 

with open('test.csv', 'wb') as f: 
    w = csv.DictWriter(f, COL_TITLES, delimiter=' ') 
    w.writeheader() 
    code = data['code'] 
    for feed in data['feeds']: 
     feed.update(code=code) 
    w.writerows(data['feeds']) 
Verwandte Themen