作为序言,将会有很多看起来重复的问题,但这些问题的解决方案都没有真正帮助到我。我有我用来编写字典列表的常用代码,使用 csv 包:
import csv
to_csv = list_dic
keys = to_csv[0].keys()
with open('output.csv', 'w') as output_file:
dict_writer = csv.DictWriter(output_file, keys)
dict_writer.writeheader()
dict_writer.writerows(to_csv)
当用在具有单个键值的字典列表上时,这段代码工作得很好(好吧,除了输出 csv 每隔一行有一个空行的事实),但现在我有一个具有多个值的字典列表每个键,很像下面的例子:
list_dic = [{'a':[x,y],'b':[1,2],'c':[1,2]},
{'a':[x,y],'b':[1,2],'c':[1,2]},
{'a':[x,y],'b':[1,2],'c':[1,2]},
{'a':[x,y],'b':[1,2],'c':[1,2]}]
基本上我的 csv 输出目前看起来像这样:
'a' 'b' 'c'
[x,y] [1,2] [1,2]
[x,y] [1,2] [1,2]
[x,y] [1,2] [1,2]
[x,y] [1,2] [1,2]
我正试图到达这里:
'a' 'b' 'c'
x 1 1
y 2 2
x 1 1
y 2 2
x 1 1
y 2 2
x 1 1
y 2 2
我已经提出了非常相似的问题,但似乎无法将任何解决方案应用于我的特定情况。我试过使用某种 for 语句来写入多行,但失败了。
感谢您的帮助,如果您知道任何与这种情况重复的问题,请指出正确的方向。
编辑:示例中每个键有 2 个值,但实际上值的数量是未知的,只有 >1
请您参考如下方法:
如果你压缩和解压缩数据足够多,你会得到你想要的格式:
list_dic = [{'a':['x','y'],'b':[1,2],'c':[1,2]},
{'a':['x','y'],'b':[1,2],'c':[1,2]},
{'a':['x','y'],'b':[1,2],'c':[1,2]},
{'a':['x','y'],'b':[1,2],'c':[1,2]}]
import csv
to_csv = list_dic
keys = to_csv[0].keys()
with open('output.csv', 'w') as output_file:
dict_writer = csv.DictWriter(output_file, keys)
dict_writer.writeheader()
for dic in list_dic:
keys, values = zip(*dic.items())
for values in zip(*values):
dict_writer.writerow(dict(zip(keys, values)))
