【问题标题】:Write a list of dict as consecutive columns to csv将 dict 列表作为连续列写入 csv
【发布时间】:2017-03-16 05:33:16
【问题描述】:

我正在尝试编写字典列表,例如: list = [dict1, dict2,...,] 具有以下内容: dict1 = {key1: value1, key2: value2,...} 如何将每个 dict 连续写入 2 列,写入一个 csv 文件?你会让第 1 列和第 2 列属于 dict1 的键和值,第 3 列和第 4 列包含 dict2... 的键和值等等?

【问题讨论】:

  • 你想要 dict3 在第 5 列和第 6 列吗?
  • 是 - 连续 dict 进入接下来的 2 列。
  • 首先,不要称它为list
  • SO 不是代码编写服务,即使是,您的要求也不清楚。请查看How to Ask

标签: python list python-3.x csv dictionary


【解决方案1】:

请试试这个程序,希望它能产生你需要的输出,

import csv

dict1 = {'key11' : 'value11', 'key12' : 'value12', 'key13' : 'value13'}
dict2 = {'key21' : 'value21', 'key22' : 'value22', 'key23' : 'value23'}
dict3 = {'key31' : 'value31', 'key32' : 'value32', 'key33' : 'value33'}

list1 = [dict1, dict2, dict3]

with open('mycsvfile.csv','wb') as f:
    w = csv.writer(f)
    for entry in list1:
        lis = []
        for key,values in sorted(entry.items()):
            lis.append(key)
            lis.append(values)
        w.writerow(lis)

输出:

key11,value11,key12,value12,key13,value13
key21,value21,key22,value22,key23,value23
key31,value31,key32,value32,key33,value33

如有任何疑问,请告诉我。

【讨论】:

    【解决方案2】:

    假设您的列表是l=[{1: 2, 3: 4, 5: 6}, {9: 10, 11: 12, 7: 8}, {17: 18, 13: 14, 15: 16}]。从每个字典中提取键和值开始:

    [l0.items() for l0 in l]
    # [dict_items([(1, 2), (3, 4), (5, 6)]), 
    #  dict_items([(9, 10), (11, 12), (7, 8)]), 
    #  dict_items([(17, 18), (13, 14), (15, 16)])]
    

    现在,让我们将每个元组列表组合成一个平面列表:

    from itertools import chain
    [list(chain.from_iterable(l0.items())) for l0 in l]
    # [[1, 2, 3, 4, 5, 6], 
    #  [9, 10, 11, 12, 7, 8], 
    #  [17, 18, 13, 14, 15, 16]]
    

    结果可以直接提供给 CSV 写入器。

    【讨论】:

      【解决方案3】:

      使用 itertools 链:

      import csv
      from itertools import chain
      
      dictionary = [{'key1': 'value1'}, {'key2': 'value2'},
                    {'key3': 'value3'}, {'key4': 'value4'}]
      
      with open('file', 'w') as fh:
          csv_file = csv.writer(fh)
          csv_file.writerow(chain(*(i for e in dictionary for i in zip(e.keys(), e.values()))))
      

      结果:

      cat file
      key1,value1,key2,value2,key3,value3,key4,value4
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-04
        • 1970-01-01
        • 2021-01-01
        • 1970-01-01
        • 2020-05-29
        • 2021-11-09
        相关资源
        最近更新 更多