我有一个三层的字典,我需要以csv格式保存它。我按照post中的代码进行了操作。但我只得到两行,所有数据都放在一行中。
如何分隔数据并将其写入单独的单元格中。
{'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)
由于
答案 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)