如何将多层字典保存到csv

时间:2014-06-20 19:55:26

标签: python csv

我有一个三层的字典,我需要以csv格式保存它。我按照post中的代码进行了操作。但我只得到两行,所有数据都放在一行中。

如何分隔数据并将其写入单独的单元格中。

{'Alpha': {'2010': {'216': 0.0, '217': 0.0, '218': 195.37308756510416}}}

其他键(BetaOmega)与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)

由于

3 个答案:

答案 0 :(得分:0)

首先,建议:如果您要发布一些您正在处理的数据,请忽略除小代表样本以外的所有数据 - 没有人有时间准备好通过所有这些数字滚动离屏幕边缘。

以下是您输入的较小样本:

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

答案 1 :(得分:0)

如果您的输出应该如下所示:

    ['Alpha', '2010', '217', 0.0]
    ['Alpha', '2010', '215', 0.0]
    ['Alpha', '2010', '205', 0.0]
    ['Alpha', '2010', '213', 0.0]

此代码将执行此操作(其中dd是您的字典):

    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)

只需用写入csv文件

替换print pls

答案 2 :(得分:0)

这并没有直接回答这个问题,但如果可能的话,你应该想到另一种可以自然处理嵌套字典的格式。 Python有一个JSON模块,使用起来非常简单。使用A作为嵌套字典:

import json
print json.dumps(A, indent=True)

这给出(截断):

{
 "Alpha": {
  "2010": {
   "216": 0.0, 
   "217": 0.0, 
   "215": 0.0, 
   ....
   "111": 0.0, 
   "169": 0.0
  }
 }
}

这里的优点是双重的。 JSON文件可以广泛移植,如果需要,文件仍然是人类可读的。将其保存到文件也很容易:

with open("myfile.json",'w') as FOUT:
    js = json.dumps(A, indent=True)
    FOUT.write(js)
相关问题