writer = csv.DictWriter(result, fieldnames=Fnames)
for val in Fnames:
for row in List:
if str(row[1]) == str(val):
dic = {str(val): row[2]}
print dic.items()
writer.writerows(dic)
我得到了:
Error: ValueError: dict contains fields not in fieldnames: S, c, h, o, o, l
我正在将字典值写入CSV文件,但是我收到以下错误。我尝试了不同的方法但没有成功。要将行写入CSV,我需要做什么?
答案 0 :(得分:1)
Fnames
需要使用list
个字段名称。看起来你已将它传递给string
“学校”,它会逐个遍历每个字母。
检查here以获取一些文档/示例。
答案 1 :(得分:1)
错误消息指出您的词典包含的fieldnames
参数中没有相应条目的键。假设这些只是额外的字段,您可以使用extrasaction
parameter during construction of your DictWriter
对象忽略它们:
答案 2 :(得分:0)
您获得的具体错误是因为您以单个字典作为参数调用writer.writerows
。 writerows
期望得到一个可迭代的词典,而不仅仅是一个,所以它误解了一些东西。它遍历字典(获取密钥)但期望得到内部的序列。当它迭代那些(为了确保字典具有预期的键)时,它会看到字典键的字母。
我不确定你的逻辑应该是什么。可能你不应该在顶层迭代Fnames
,因为你写的每个字典都需要包含其中的每个字段(除非你为extrasaction
参数指定一个非默认值DictWriter
)。也许首先在List
项上循环,然后在Fname
字段之后循环,每次都向字典添加新的键和值?