简体   繁体   中英

Write a dictionary of dictionaries to csv in python

I have a dictionary of dictionaries that I would like to write out to csv. my dictionary looks like:

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

I would like it to write out as:

object1

time1, value1, value2

time2, value3, value4

object2

time1, value5, value6

time2, value7, value8

Thus far, I can only figure out how to write the key/value pairs out csv using the following code:

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

So it looks like:

objcet1,{
    time1:[value1,value2],time2:[value3,value4]
}

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

I have tried writing just the outer keys (keys labeled object1 and object2) using

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

but it just writes out a blank file. I think If I could figure out how to write the outer keys by themselves, I would be able to write out the csv as I want. Does anyone have any suggestions?

I personally recommend using Excel, I have been working on .csv files, but ended up using .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()

And there you can change the columns and the rows increment so that you get the excel table you want to. You can even export it as a .csv file afterwards from Excel.

Your expected output format looks very surprising and does not look like a sensible csv format.

However, this would result in exactly what you seem to be looking for :

>>> 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 

Try this:

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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM