2016-08-05 6 views
1

私はCSVにネストされた辞書をPythonで書き込もうとしています。私は、Python.orgのcsv.DictWriterのドキュメントと、ここでstackoverflowのいくつかの例を見てきましたが、最後の部分を理解することはできません。ここでは代表的なデータセットは次のとおりです。CSVにネストされたディクショナリを書き込む

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 

これは私があなたのコードに問題がループである

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

答えて

0

ファイル私のCSVへの書き込みしたいものです。 すべてのフィードをループしたいが、実際にはデータをループしていた。しかし、これは十分ではありません

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

ので、: あなたのために:そのよう

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

これは何をしたいあなたに

feeds 
code 

を与えるだろうが、フィードをループにありますコードはすべてのフィールドにあるわけではなく、データ内で一度だけ宣言されているので、コードをすべての行に記述するように変更する必要があります。

for feed in data[u'feeds']: 
    w.writerow(dict(feed, code=data[u'code'])) 
0

データ構造内のu'feeds'のリストの辞書にはそれぞれu'code'という値がありません。これは、データ構造を変更するものの、すべてを一度に書き出すことができるように(データ構造は変更されますが)、それぞれを更新することで簡単に解決できます。

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']) 
関連する問題