我有一本看起来像这样的字典:
{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/