Python 如何将多层字典保存到csv
我有一个三层字典,我需要以csv格式保存它。我遵循了这段代码。但我只得到两行,所有数据都转储在一行中 如何分离数据并将其写入单独的单元格Python 如何将多层字典保存到csv,python,csv,Python,Csv,我有一个三层字典,我需要以csv格式保存它。我遵循了这段代码。但我只得到两行,所有数据都转储在一行中 如何分离数据并将其写入单独的单元格 {'Alpha': {'2010': {'216': 0.0, '217': 0.0, '218': 195.37308756510416}}} 还有其他键(Beta和Omega)与Alpha处于同一级别 我希望最终产品看起来像: Alpha,2010,216,0.0 Alpha,2010,217,0.0 Alpha,2010,218,195.3730875
{'Alpha': {'2010': {'216': 0.0, '217': 0.0, '218': 195.37308756510416}}}
还有其他键(Beta
和Omega
)与Alpha
处于同一级别
我希望最终产品看起来像:
Alpha,2010,216,0.0
Alpha,2010,217,0.0
Alpha,2010,218,195.37308756510416
.....
Beta, .....
最好将其保存在.csv
文件中,但文本文件也可以
这是我尝试过的代码
with open('mycsvfile.csv', 'wb') as f:
w = csv.DictWriter(f, datadictionary.keys())
w.writeheader()
w.writerow(datadictionary)
首先,我有一个建议:如果你要发布一些你正在处理的数据,除了一个小的有代表性的样本外,请忽略所有数据——没有人有时间准备好浏览屏幕边缘的所有数字 以下是您输入的较小示例:
{'Alpha': {'2010': {'216': 0.0, '217': 0.0, '218': 195.4 } } }
您没有说明的一点是,是否存在与“Alpha”相同级别的其他键,以及是否存在与“2010”相同级别的键。如果是这样,那么csv也必须在每一行中包含这些值
以下是建议的csv格式,带有列标题:
section,year,key,value
Alpha,2010,216,0.0
Alpha,2010,217,0.0
Alpha,2010,218,195.37308756510416
... etc.
那么你是如何创造这个呢
只需遍历字典,并跟踪要插入到每行中的外部字典键:
text = "section,year,key,value\n"
for sectionName in myData:
yearData = myData[sectionName]
for year in yearData:
keyValueDict = yearData[year]
for key in keyValueDict:
value = keyValueDict[key]
text += sectionName + "," + year + "," + key + "," + str(value) + "\n"
要写入csv文件,请执行以下操作:
f = open("mydata.csv", "w")
f.write(text)
f.close()
如果您的输出应该如下所示:
['Alpha', '2010', '217', 0.0]
['Alpha', '2010', '215', 0.0]
['Alpha', '2010', '205', 0.0]
['Alpha', '2010', '213', 0.0]
此代码将完成此操作(其中dd是您的字典):
只需将打印pls替换为写入csv文件即可这并不能直接回答问题,但如果可能,您应该考虑另一种可以自然处理嵌套字典的格式。Python有一个JSON模块,使用起来非常简单。使用
A
作为嵌套字典:
def do_keys(d, plst, lvl=0):
for elem in d:
plst[lvl] = elem
if isinstance(d[elem], dict):
do_keys(d[elem], plst, lvl+1)
else:
plst[-1] = d[elem]
print plst
do_keys(dd, ['']*4)
import json
print json.dumps(A, indent=True)
这将给出(截断的):
这里的优势是双重的。JSON文件具有广泛的可移植性,如果需要,该文件仍然是人类可读的。将其保存到文件也很容易:
with open("myfile.json",'w') as FOUT:
js = json.dumps(A, indent=True)
FOUT.write(js)
如果你能告诉我们字典的每一部分应该是什么,csv应该是什么样子的。谢谢你的评论,我试图在原始帖子中详细阐述。因此,我假设我可以将
测试
转储到一个csv
文件中?是的,只要打开一个文件并调用write(),以文本作为内容,它将是一个csv文件。
with open("myfile.json",'w') as FOUT:
js = json.dumps(A, indent=True)
FOUT.write(js)