用Python将字典嵌套字典写入CSV

4

我有一个字典嵌套字典,想要将其写入 CSV 文件。我的字典如下:

dict={
    object1:
        {
            time1:[value1,value2],
            time2:[value3,value4]
        },
    object2:
        {
            time1:[value5,value6],time2[value7,value8]
        }
    }

我希望它写成如下格式:

对象1

时间1,数值1,数值2

时间2,数值3,数值4

对象2

时间1,数值5,数值6

时间2,数值7,数值8

到目前为止,我只能使用以下代码将键/值对写出csv。
writer = csv.writer(open('test.csv','wb'))
for key, value in Dict.items():
    writer.writerow([key,value])

所以看起来像这样:
objcet1,{
    time1:[value1,value2],time2:[value3,value4]
}

objcet2,{
    time1:[value5,value6],time2:[value7,value8]
}

我曾尝试通过以下方式仅编写外部键(标记为object1和object2的键):

writer = csv.writer(open('test.csv','wb'))
for key, value in Dict.key():
    writer.writerow([key])

但是它只写出一个空文件。我认为如果我能找出如何单独写出外部键,就可以按照所需的格式写出csv文件。有人有什么建议吗?

3个回答

2

我个人推荐使用Excel,我之前一直在处理.csv文件,但最终选择了使用.xlsx格式。

import xlsxwriter
workbook = xlsxwriter.Workbook('File.xlsx')
worksheet = workbook.add_worksheet()                            
row = 0
col = 0
for key in dictionary.keys():
    row += 1
    worksheet.write(row, col, key)
    for item in dictionary[key]:
        worksheet.write(row, col + 1, item)
        worksheet.write(row, col + 2, dictionary[key][item][0])
        row += 1

workbook.close()

在那里,您可以更改列和行的增量,以便获得所需的Excel表格。您甚至可以从Excel中导出它作为 .csv 文件。


1

你期望的输出格式看起来非常令人惊讶,不像是一个合理的csv格式。

然而,这将会得到你所期望的结果:

>>> mydict = {'object1':{'time1':['value1','value2'],'time 2':['value3','value4']},'object2':{'time1':['value5','value6'],'time2':['value7','value8']}}

>>> print "\n".join(["%s %s " % (k, " ".join([", ".join([k1]+v1) for (k1,v1) in v.iteritems()])) for (k,v) in mydict.iteritems()])

object1 time1, value1, value2 time2, value3, value4 
object2 time1, value5, value6 time2, value7, value8 

该解决方案仅在值不包含任何需要进行 CSV 转义的字符,特别是逗号、引号和换行符时才有效。使用 csv.writerow() 可确保一切都被正确转义。 - roskakori

1

试试这个:

import csv

writer = csv.writer(open('test.csv','wb'))
d={'object1':{'time1':['value1','value2'],'time2':['value3','value4']},
   'object2':{'time1':['value5','value6'],'time2':['value7','value8']}}
for key, value in d.iteritems():
    ln = [key]
    for ik, iv in value.iteritems():
        ln.append(ik)
        ln.extend([v for v in iv])
    writer.writerow(ln)

谢谢你们两位的帮助。这两个建议都输出:object1,time1,value1,value2,time2,value3,value4 object2,time1,value5,value6,time2,value7,value8而我想要的是:object1 time1,value1,value2 time2,value3,value4 object2 time1,value5,value6 time2,value7,value8我会采纳你们提供的建议,并尝试调整以得到我想要的结果。如果你们有任何建议,那就太好了。再次感谢! - user1828018

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接