简体   繁体   English

如何将字典列表写入具有多个值的 CSV

[英]how to write a list of dictionaries into a CSV with multiple values

I have a list of dictionaries in "my_list" as follows:我在“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]}]

I want to write this list into a CSV file as follows:我想将此列表写入 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   

Does anyone know how can I handle it?有谁知道我该如何处理?

Tablib should do the trick Tablib应该可以解决问题

I leave here the example on their front page (which you can adapt to the .csv format) :我在他们的首页上留下了这个例子(你可以适应 .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

You could do this... (replacing print with a csv writerow as appropriate)你可以这样做......(根据需要用 csv writerow 替换打印)

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)

You can use pandas to do the trick:您可以使用熊猫来解决这个问题:

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

This produces the following output as dataframe :这会产生以下输出作为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

and this is the out.csv -file:这是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

See pandas documentation about the csv -feature ( csv ).请参阅有关csvcsv )的熊猫文档。

Write DataFrame to a comma-separated values (csv) file将 DataFrame 写入逗号分隔值 (csv) 文件

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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