2009-08-15 13 views
2

私はPythonでCSVモジュールを使用して、辞書をcsvの行に変換するDictWriterクラスを試していました。入れ子の辞書を扱う方法はありますか?具体的には、私はこのような構造を持っているディスカスのコメントを輸出している:DictWriterではネストされた辞書はどのように処理されますか?

{ 
u'status': u'approved', 
u'forum': {u'id': u'', u'': u'', u'shortname': u'', u'name': u'', u'description': u''}, 
u'thread': {u'allow_comments': True, u'forum': u'', u'title': u'', u'url': u'', u'created_at': u'', u'id': u'', u'hidden': False, u'identifier': [], u'slug': u''}, 
u'is_anonymous': False, 
u'author': {u'username': u'', u'email_hash': u'', u'display_name': u'', u'has_avatar': True, u'url': u'', u'id': 1, u'avatar': {u'small': u'', u'large': u'', u'medium': u''}, u'email': u''}, 
u'created_at': u'2009-08-12T10:14', 
u'points': 0, 
u'message': u"", 
u'has_been_moderated': False, 
u'ip_address': u'', 
u'id': u'', 
u'parent_post': None 
} 

私は著者とスレッドのプロパティからフィールドを指定したいと、これまでの方法を発見していません。ここでは、コードです:

f = open('export.csv', 'wb') 
fieldnames = ('id','status','is_anonymous','created_at','ip_address','points','has_been_moderated','parent_post','thread') 
try: 
    exportWriter = csv.DictWriter(f, 
     fieldnames, 
     restval=None, 
     extrasaction='ignore', 
     quoting=csv.QUOTE_NONNUMERIC 
     ) 

    for c in comments: 
     exportWriter.writerow(c) 

finally: 
    f.close() 

答えて

1

私はあなたが持っているつもり主な問題は、CSVデータの1つのフラット行にネストされたデータ構造を表現する方法だと思います。

サブディクショナリからトップレベルディクトにキーをフラット化するために、何らかの形の名前を使用することができます。

例えばスレッド ':{u'allow_comments':

はthread_allows_commentsなります。

+0

私はいくつかを選んで、サブディクショナリを完全に変換する必要はないので、サブディクショナリのプロパティに対処する方法があると思っていました。しかし、あなたが正しいです、おそらく事前に事前処理し、辞書を最初に平坦化する必要があります。 – RyanW

関連する問題