Python 如何将多层字典保存到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

我有一个三层字典,我需要以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.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)