DictWriter如何处理嵌套字典?

3 投票
1 回答
1298 浏览
提问于 2025-04-15 13:37

我在用Python的CSV模块时,尝试使用DictWriter类把字典转换成CSV文件中的行。请问有没有办法处理嵌套字典?具体来说,我在导出Disqus评论,这些评论的结构是这样的:

{
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 个回答

1

我觉得你主要的问题是怎么把一个嵌套的数据结构表示成一行平面的CSV数据。

你可以用某种方式把子字典的键合并到顶层字典里,这样就能把它们“压扁”。

比如说,'thread': {u'allow_comments':

就可以变成 thread_allows_comments。

撰写回答