【问题标题】:How are nested dictionaries handled by DictWriter?DictWriter 如何处理嵌套字典?
【发布时间】:2010-11-19 22:55:00
【问题描述】:

在 python 中使用 CSV 模块,我正在尝试使用 DictWriter 类将字典转换为 csv 中的行。有没有办法处理嵌套字典?具体来说,我正在导出具有如下结构的 Disqus cmets:

{
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()

【问题讨论】:

    标签: python csv


    【解决方案1】:

    我认为您将遇到的主要问题是如何在一行 csv 数据中表示嵌套数据结构。

    您可以使用某种形式的名称修改将子字典中的键扁平化为顶级字典。

    例如线程':{u'allow_cmets':

    会变成thread_allows_cmets。

    【讨论】:

    • 我只想挑选一些,不一定要完全转换子字典,所以我希望有一种方法可以解决子字典的属性。但是,您是对的,可能必须先对字典进行预处理和展平。
    猜你喜欢
    • 1970-01-01
    • 2020-12-03
    • 2021-07-24
    • 2021-12-19
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    相关资源
    最近更新 更多