【问题标题】:how to write a list of dictionaries into a CSV with multiple values如何将字典列表写入具有多个值的 CSV
【发布时间】:2018-03-10 04:18:12
【问题描述】:

我在“my_list”中有一个字典列表如下:

my_list=[{'Id': '100', 'A': [val1, val2], 'B': [val3, val4], 'C': [val5,val6]}, 
         {'Id': '200', 'A': [val7, val8], 'B': [val9, val10], 'C': 
         [val11,val12],
         {'Id': '300', 'A': [val13, val14], 'B': [val15, val16], 'C':   
         [val17,val18]}]

我想将此列表写入 CSV 文件,如下所示:

ID,  A,     AA,    B,     BB,    C,     CC
100, val1,  val2,  val3,  val4,  val5,  val6
200, val7,  val8,  val9,  val10, val11, val12
300, val13, val14, val15, val16, val17, val18   

有人知道我该如何处理吗?

【问题讨论】:

  • 阐述你的逻辑。为什么结果中漏掉了'Id': '300'?输出不清楚
  • 对于同一个键,所有行都会有相同数量的值吗?
  • 为什么ID = 200 行存储了'Id': '300' 的值?
  • 是的,这些行只是一个示例。 'Id':'300' 也应该在输出中。

标签: python csv dictionary


【解决方案1】:

Tablib 应该可以解决问题

我在他们的首页上留下了示例(您可以适应 .csv 格式):

>>> data = tablib.Dataset(headers=['First Name', 'Last Name', 'Age'])
>>> for i in [('Kenneth', 'Reitz', 22), ('Bessie', 'Monke', 21)]:
...     data.append(i)


>>> print(data.export('json'))
[{"Last Name": "Reitz", "First Name": "Kenneth", "Age": 22}, {"Last Name": "Monke", "First Name": "Bessie", "Age": 21}]

>>> print(data.export('yaml'))
- {Age: 22, First Name: Kenneth, Last Name: Reitz}
- {Age: 21, First Name: Bessie, Last Name: Monke}

>>> data.export('xlsx')
<censored binary data>

>>> data.export('df')
  First Name Last Name  Age
0    Kenneth     Reitz   22
1     Bessie     Monke   21

【讨论】:

  • 如果此解决方案满足您的需求,请在我的答案上打勾
【解决方案2】:

您可以这样做...(酌情用 csv 写入器替换 print)

print(['ID', 'A', 'AA', 'B', 'BB', 'C', 'CC'])
for row in my_list:
    out_row = []
    out_row.append(row['Id'])
    for v in row['A']:
        out_row.append(v)
    for v in row['B']:
        out_row.append(v)
    for v in row['C']:
        out_row.append(v)
    print(out_row)

【讨论】:

    【解决方案3】:

    您可以使用pandas 来解决问题:

    my_list = [{'Id': '100', 'A': [val1, val2], 'B': [val3, val4], 'C': [val5, val6]},
               {'Id': '200', 'A': [val7, val8], 'B': [val9, val10], 'C': [val11, val12]},
               {'Id': '300', 'A': [val13, val14], 'B': [val15, val16], 'C': [val17, val18]}]
    
    index = ['Id', 'A', 'AA', 'B', 'BB', 'C', 'CC']
    
    df = pd.DataFrame(data=my_list)
    for letter in ['A', 'B', 'C']:
        first = []
        second = []
        for a in df[letter].values.tolist():
            first.append(a[0])
            second.append(a[1])
        df[letter] = first
        df[letter * 2] = second
    
    df = df.reindex_axis(index, axis=1)
    df.to_csv('out.csv')
    

    这会产生以下输出为dataframe

        Id   A  AA   B  BB   C  CC
    0  100   1   2   3   4   5   6
    1  200   7   8   9  10  11  12
    2  300  13  14  15  16  17  18
    

    这是out.csv-文件:

    ,Id,A,AA,B,BB,C,CC
    0,100,1,2,3,4,5,6
    1,200,7,8,9,10,11,12
    2,300,13,14,15,16,17,18
    

    请参阅有关 csv 功能 (csv) 的 pandas 文档。

    将 DataFrame 写入逗号分隔值 (csv) 文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-15
      • 2017-12-12
      • 1970-01-01
      • 2014-06-17
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      相关资源
      最近更新 更多