【问题标题】:Write a dictionary of dictionaries to csv in python在python中将字典字典写入csv
【发布时间】:2012-11-04 14:31:10
【问题描述】:

我有一本字典,我想写到 csv 中。我的字典看起来像:

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

我希望它写成:

object1

时间1,值1,值2

时间2,值3,值4

object2

时间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。有人有什么建议吗?

【问题讨论】:

    标签: python csv dictionary


    【解决方案1】:

    我个人推荐使用 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 文件。

    【讨论】:

      【解决方案2】:

      您预期的输出格式看起来非常令人惊讶,并且看起来不像是合理的 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() 可以确保所有内容都被正确转义。
      【解决方案3】:

      试试这个:

      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 我会接受你提供给我的东西,看看我是否可以调整它以获得我想要的东西。如果您有任何建议,那也很棒。再次感谢!
      猜你喜欢
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 2018-03-19
      • 2018-06-17
      • 2017-03-29
      • 1970-01-01
      • 2016-03-01
      • 2015-06-06
      相关资源
      最近更新 更多