我正在尝试将以下字典写入csv文件:
reset done successfully
limits set to value : <Old Non zero value>
Values for owner <owner> has not been reset, so retrying !
我想要实现的结果是将字典键作为列标题是csv文件并将相应的键值映射到这些列:
mydict = {'k1':[1,2,3], 'k2':[4,5,6], 'k3':[6,7,8]}
我尝试过以下代码,但这对我不起作用:
k1 k2 k3
1 4 6
2 5 7
3 6 8
答案 0 :(得分:3)
如果您不反对pandas
,这很容易:
import pandas as pd
pd.DataFrame(mydict).to_csv('filename.csv',index=None, sep=' ')
注意,sep=' '
是将它作为空格分隔的csv。您可以省略(或使用sep=','
,这是默认值)将其作为常规逗号分隔的csv
答案 1 :(得分:1)
我修改了你的函数,因此它不使用通常应该尽可能避免的全局变量。这里的“技巧”是使用内置的zip()
函数来转置字典中的值,使它们处于列专业而不是行主要顺序。
为了更好地理解下面代码中发生的情况,首先要考虑dictionary.values()
调用是否从您问题中字典中显示的示例数据生成以下序列:
[1, 2, 3], [4, 5, 6], [6, 7, 8]
通过使用以下简写的Python表示法(注意zip()
前缀),所有这些都一次性地传递给*
函数:
zip(*dictionary.values())
这相当于这样称呼:
zip([1, 2, 3], [4, 5, 6], [6, 7, 8])
因此zip()
函数会重新排列它们,从而产生这个序列:
(1, 4, 6), (2, 5, 7), (3, 6, 8)
另一种思考方式是将值视为二维矩阵:
1, 2, 3
4, 5, 6
6, 7, 8
zip()
正在对他们进行处理:
1, 4, 6
2, 5, 7
3, 6, 8
换句话说,它正在交换矩阵的行和列,这被称为“转置”矩阵。正如我所说的那样,在这里完成将它们放入将行列值逐行写入csv文件所需的顺序。
无论如何,这是代码:
import csv
def save_output(dictionary, output_file_name):
with open(output_file_name, 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(dictionary) # First row (the keys of the dictionary).
for values in zip(*dictionary.values()):
writer.writerow(values)
mydict = {'k1': [1, 2, 3], 'k2': [4, 5, 6], 'k3': [6, 7, 8]}
save_output(mydict, 'test_output.csv')
生成的test_output.csv
文件的内容:
k1,k2,k3
1,4,6
2,5,7
3,6,8
答案 2 :(得分:0)
您可以尝试以下方法:
import csv
def save_output(mydict, output_file_name):
keys = [list(mydict.keys())]
values = [mydict[key] for key in mydict.keys()]
final = keys + values
with open(output_file_name, 'w', newline='') as csvfile:
writer = csv.writer(csvfile, delimiter=' ')
writer.writerows(final)
mydict = {'k1':[1,2,3], 'k2':[4,5,6], 'k3':[6,7,8]}
save_output(mydict, "output_file_name.csv")
打开csv
文件时的输出是:
k1 k2 k3
1 2 3
4 5 6
6 7 8