如何将字典的值写入 CSV 文件
How to write the values of a dictionary into a CSV file
这是我的 Python 版本:
import sys
print(sys.version)
>> 3.6.9 (default, Nov 7 2019, 10:44:02)
>> [GCC 8.3.0]
我 运行 在 Google Colaboratory 笔记本上。
我是 Python 的新手,我还没有找到任何有用的示例来说明如何将以下字典写入 CSV。
print(my_dict)
>> {'loss': [0.411, 0.115, 0.147, 0.078, 0.032], 'accuracy': [0.996, 0.997, 0.997, 0.997, 0.997], 'val_loss': [0.147, 0.100, 0.187, 0.065, 0.052], 'val_accuracy': [0.99, 0.99, 0.99, 0.996, 0.996]}
并且:
print(type(my_dict))
>> <class 'dict'>
我想获取这个 CSV 文件:
loss,accuracy,val_loss,val_accuracy
0.411,0.996,0.147,0.99
0.115,0.997,0.100,0.99
0.147,0.997,0.187,0.99
0.078,0.997,0.065,0.996
0.032,0.997,0.052,0.996
每个键的值作为列。
我正在尝试使用这段代码(我正在使用标准输出来查看发生了什么):
import sys
import csv
w = csv.DictWriter(sys.stdout, my_dict.keys())
w.writeheader()
w.writerows(my_dict.values())
但我收到错误消息:
AttributeError: 'list' object has no attribute 'keys'
我把最后一行改成这样:
w.writerows(my_dict)
我得到同样的错误:
AttributeError: 'str' object has no attribute 'keys'
还有这个:
w.writerows(results.history.items())
出现错误:
AttributeError: 'tuple' object has no attribute 'keys'
另外,我试过了:
for key, value in my_dict.items():
w.writerow([key,value])
出现错误:
AttributeError: 'list' object has no attribute 'keys'
另一个测试:
for data in my_dict:
w.writerow(data)
出现错误:
AttributeError: 'str' object has no attribute 'keys'
我该怎么做?
import csv
my_dict = {'loss': [0.411, 0.115, 0.147, 0.078, 0.032], 'accuracy': [0.996, 0.997, 0.997, 0.997, 0.997], 'val_loss': [0.147, 0.100, 0.187, 0.065, 0.052], 'val_accuracy': [0.99, 0.99, 0.99, 0.996, 0.996]}
with open("test.csv", "w") as outfile:
writer = csv.writer(outfile)
writer.writerow(my_dict.keys())
writer.writerows(zip(*my_dict.values()))
输出:
loss,accuracy,val_loss,val_accuracy
0.411,0.996,0.147,0.99
0.115,0.997,0.1,0.99
0.147,0.997,0.187,0.99
0.078,0.997,0.065,0.996
0.032,0.997,0.052,0.996
如果您需要对字典进行排序:
keys = sorted(my_dict.keys())
with open("test.csv", "w") as outfile:
writer = csv.writer(outfile, delimiter = ",")
writer.writerow(keys)
writer.writerows(zip(*[my_dict[key] for key in keys]))
排序输出:
accuracy,loss,val_accuracy,val_loss
0.996,0.411,0.99,0.147
0.997,0.115,0.99,0.1
0.997,0.147,0.99,0.187
0.997,0.078,0.996,0.065
0.997,0.032,0.996,0.052
更多关于 zip。
你得到所有这些 AttributeError
异常的原因是你没有正确使用 writerow()
的 DictWriter
版本。该版本的 writerow
将字典作为参数,其中字典的键是行字段的名称,字典的值是行字段的值。这意味着您的 CSV 文件的第 i
行(不包括 header)应该这样写:
w.writerow({'loss': my_dict['loss'][i],
'accuracy': my_dict['accuracy'][i],
'val_loss': my_dict['val_loss'][i],
'val_accuracy': my_dict['val_accuracy'][i]})
由于这有点笨拙,Harshal Parekh 编写 CSV 文件的方法更好,尽管他的第一种方法确实依赖 Python 以某种方式对字典条目进行排序。 (旧版本的 Python 需要 my_dict
类型为 OrderedDict
才能使第一种方法起作用。)
这是我的 Python 版本:
import sys
print(sys.version)
>> 3.6.9 (default, Nov 7 2019, 10:44:02)
>> [GCC 8.3.0]
我 运行 在 Google Colaboratory 笔记本上。
我是 Python 的新手,我还没有找到任何有用的示例来说明如何将以下字典写入 CSV。
print(my_dict)
>> {'loss': [0.411, 0.115, 0.147, 0.078, 0.032], 'accuracy': [0.996, 0.997, 0.997, 0.997, 0.997], 'val_loss': [0.147, 0.100, 0.187, 0.065, 0.052], 'val_accuracy': [0.99, 0.99, 0.99, 0.996, 0.996]}
并且:
print(type(my_dict))
>> <class 'dict'>
我想获取这个 CSV 文件:
loss,accuracy,val_loss,val_accuracy
0.411,0.996,0.147,0.99
0.115,0.997,0.100,0.99
0.147,0.997,0.187,0.99
0.078,0.997,0.065,0.996
0.032,0.997,0.052,0.996
每个键的值作为列。
我正在尝试使用这段代码(我正在使用标准输出来查看发生了什么):
import sys
import csv
w = csv.DictWriter(sys.stdout, my_dict.keys())
w.writeheader()
w.writerows(my_dict.values())
但我收到错误消息:
AttributeError: 'list' object has no attribute 'keys'
我把最后一行改成这样:
w.writerows(my_dict)
我得到同样的错误:
AttributeError: 'str' object has no attribute 'keys'
还有这个:
w.writerows(results.history.items())
出现错误:
AttributeError: 'tuple' object has no attribute 'keys'
另外,我试过了:
for key, value in my_dict.items():
w.writerow([key,value])
出现错误:
AttributeError: 'list' object has no attribute 'keys'
另一个测试:
for data in my_dict:
w.writerow(data)
出现错误:
AttributeError: 'str' object has no attribute 'keys'
我该怎么做?
import csv
my_dict = {'loss': [0.411, 0.115, 0.147, 0.078, 0.032], 'accuracy': [0.996, 0.997, 0.997, 0.997, 0.997], 'val_loss': [0.147, 0.100, 0.187, 0.065, 0.052], 'val_accuracy': [0.99, 0.99, 0.99, 0.996, 0.996]}
with open("test.csv", "w") as outfile:
writer = csv.writer(outfile)
writer.writerow(my_dict.keys())
writer.writerows(zip(*my_dict.values()))
输出:
loss,accuracy,val_loss,val_accuracy
0.411,0.996,0.147,0.99
0.115,0.997,0.1,0.99
0.147,0.997,0.187,0.99
0.078,0.997,0.065,0.996
0.032,0.997,0.052,0.996
如果您需要对字典进行排序:
keys = sorted(my_dict.keys())
with open("test.csv", "w") as outfile:
writer = csv.writer(outfile, delimiter = ",")
writer.writerow(keys)
writer.writerows(zip(*[my_dict[key] for key in keys]))
排序输出:
accuracy,loss,val_accuracy,val_loss
0.996,0.411,0.99,0.147
0.997,0.115,0.99,0.1
0.997,0.147,0.99,0.187
0.997,0.078,0.996,0.065
0.997,0.032,0.996,0.052
更多关于 zip。
你得到所有这些 AttributeError
异常的原因是你没有正确使用 writerow()
的 DictWriter
版本。该版本的 writerow
将字典作为参数,其中字典的键是行字段的名称,字典的值是行字段的值。这意味着您的 CSV 文件的第 i
行(不包括 header)应该这样写:
w.writerow({'loss': my_dict['loss'][i],
'accuracy': my_dict['accuracy'][i],
'val_loss': my_dict['val_loss'][i],
'val_accuracy': my_dict['val_accuracy'][i]})
由于这有点笨拙,Harshal Parekh 编写 CSV 文件的方法更好,尽管他的第一种方法确实依赖 Python 以某种方式对字典条目进行排序。 (旧版本的 Python 需要 my_dict
类型为 OrderedDict
才能使第一种方法起作用。)