python - 从嵌套Python字典导出csv

标签 python csv dictionary

我有一本看起来像这样的字典:

{u'results': [{u'bucket': u'Table',
           u'data': [{u'Geography_dst': u'PE',
                      u'avg_bps': 5054970470.588235,
                      u'device': u'taco',
                      u'as': u'Telephone Company',
                      u'next_hop': u'Telephone Companu',
                      u'key': blah,
                      u'max_bps': 6613494000,
                      u'p95th_bps': 6280622000,
                      u'timeSeries': {}},

[为简洁起见,已截断]

我似乎不知道如何将这本字典解析为 csv。我无法弄清楚如何从“数据”元组中的每个键创建一列,并从适当的值填充行:

 device,as,nexthop,Geography_dst,max_bps,p95th_bps,avg_bps

(是的,我根本不想在 csv 中包含“键”或时间序列元组,但我认为一旦我弄清楚如何使用此数据结构,这一点就会很明显)。

谢谢!

最佳答案

您可以使用csv.DictWriter根据构造函数的指令从 dict 写入字段:

import csv
COLUMNS = 'device,as,next_hop,Geography_dst,max_bps,p95th_bps,avg_bps'

d = {
    u'results': [{
        u'bucket': u'Table',
        u'data': [{
            u'Geography_dst': u'PE',
            u'avg_bps': 5054970470.588235,
            u'device': u'taco',
            u'as': u'Telephone Company',
            u'next_hop': u'Telephone Companu',
            u'key': None,
            u'max_bps': 6613494000,
            u'p95th_bps': 6280622000,
            u'timeSeries': {}
        }]
    }]
}

with open('output.csv', 'w') as f:
    writer = csv.DictWriter(f, extrasaction='ignore', fieldnames=COLUMNS.split(','))
    writer.writeheader()
    rows = (row for bucket in d['results'] for row in bucket['data'])
    writer.writerows(rows)

output.csv 中的输出:

device,as,next_hop,Geography_dst,max_bps,p95th_bps,avg_bps
taco,Telephone Company,Telephone Companu,PE,6613494000,6280622000,5054970470.588235

在上面的 csv.DictWriter(f, extrasaction='ignore', fieldnames=COLUMNS.split(',')) 创建一个 writer 对象。 extrasaction 指示它跳过 fieldnames 中不存在的键。 fieldnames 是您要从每个 dict 写入的键的有序列表。 writeheader只写列名,如果不需要列可以跳过此部分。

rows 是一个生成器表达式,用于迭代结果和结果中的对象。它会一一返回您要写入的字典。最后生成器给writerows将生成器返回的所有字典写入文件。

关于python - 从嵌套Python字典导出csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41822113/

相关文章:

java - 多键多值映射可能吗?

python - 检查字典中是否存在一个项目,这是一种不好的做法吗?

python - 识别Python中滚动窗口内最大值之前出现的最小值

python - InstalledAppFlow 自动获取授权码

python - 如何在 Django 中的关系中指定唯一性

silverlight - 什么是好的 Silverlight CSV 阅读器?

python - 查找并显示具有近似接近条目的行

python - 如何使用python显示文件夹中word文档的文件名?

python csv DictReader类型

python - Pandas - 从其中一列将列添加到基于 Dict 的 DataFrame