python - 使用复合键从字典中写入 csv 文件
问题描述
我有一本字典,其键是 2 个项目的元组。我想把这本字典写成一个.csv
文件。
我的字典counter
看起来像这样:
{("Banana", "Apple") : 1,
("Apple", "Pear") : 2,
# ...
}
我试过这个:
header = ['group', 'list', 'id']
with open("file.csv", 'w') as f2:
writer = csv.DictWriter(f2, fieldnames=header)
writer.writeheader()
for key, val in counter.items():
write.writerow([key]+val)
但我得到这个错误:
TypeError: can only concatenate list (not "int") to list
有人可以帮助我吗?
编辑
我也试过这个:
with open("file.csv", 'w+') as f2:
writer = csv.DictWriter(f2, fieldnames=header)
writer.writeheader()
for key, val in counter.items():
writer.writerow(key,val)
但它现在说:
TypeError: writerow() takes 2 positional arguments but 3 were given
解决方案
从counter
您添加的字典内容示例中,我现在了解您要做什么。
以下是如何完成你想要的:
import csv
counter = {("Banana", "Apple"): 1,
("Apple", "Pear"): 2,
# ...
}
header = 'group', 'list', 'id'
with open("compound_keys.csv", 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=header)
writer.writeheader()
for (group, list_), id in counter.items():
writer.writerow(dict(zip(header, (group, list_, id))))
.csv
创建的文件内容:
group,list,id
Banana,Apple,1
Apple,Pear,2
笔记
在这种情况下,使用 acsv.writer
而不是 a会更简单、更有效,csv.DictWriter
因为这样就不需要创建一个临时字典来写入输出文件的每一行(只有一个元组)。
以下产生完全相同的结果:
header = 'group', 'list', 'id'
with open("compound_keys.csv", 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(header)
for (group, list_), id in counter.items():
writer.writerow((group, list_, id))
推荐阅读
- flutter - 按下尾随图标时,如何在 Listtile 下方显示 ExpandedTile?
- java - 在 Gradle 中使用 cmake 将 JNI 集成到 SpringBoot 中,类似于 Android
- html - 如何展平嵌套的 div 以在 CSS 网格中显示它们?
- javascript - 从 vue js 和 axios 制作的 url 应用程序获取数据时出现问题
- google-chrome - Chrome 扩展删除特定的历史事件
- c# - 我如何验证 OnActionExecuting 方法
- amazon-web-services - 如何增加 Aurora Serverless 中的查询超时超时?
- r - 如何获得唯一的命名列表?
- excel - 在excel中满足条件时从列范围复制值
- r - 如何在工作室中插入公式