这里有很多关于输出字典内容的帖子。我实际上想出了一个非最佳解决方案来解决我的问题(如下所示),但我最感兴趣的是为什么我的非最佳解决方案有效。
这是我的代码:
import csv
keys = ("Ev", "E1", "E2", "E3", "I", "B", "O", "T")
p = input("P")
e = input("e")
e2 = input("e2")
e3 = input("e3")
it = input("it")
b = input("b")
o = input("o")
t = input("t")
dictionary = {"Ev": p, "E1": e, "E2": e2, "E3": e3, "I": it, "B":b, "O": o, "T": t}
dictionary2 = {"Ev": p, "E1": e, "E2": e2, "E3": e3, "I": it, "B":b, "O": o, "T": t}
with open("infile.csv", "a") as f:
w = csv.DictWriter(f, keys)
w.writeheader()
for answer in (dictionary, dictionary2):
w.writerow(answer)
我的目标是只有一本字典。但是当我尝试输出字典的内容时,我不断收到关于“B”的 ValueError。我尝试了一些解决方案,最好的一个似乎是添加第二个字典,它只打印两次完全相同的输出,当我打开它时,我可以从输出文件中删除完全相同的重复项。我知道这是一种糟糕的做法,但这是我所拥有的最快的解决方案,而且在一段时间内陷入这种状态真是太可惜了。
为什么在这种情况下添加第二个字典有效?如果只使用一个字典,我不明白为什么这段代码会抛出 ValueError ,但是当两个字典工作正常时(除了重复的行,我必须删除)。
编辑
非工作代码是以下行:
for answer in (dictionary):
正如 Martijn 亲切地指出的那样,它只是循环遍历一个字典的键。
编辑2
而且,回溯错误是:
Traceback (most recent call last):
File "file.py", line 41, in <module>
w.writerow(answer)
File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/csv.py", line 153, in writerow
return self.writer.writerow(self._dict_to_list(rowdict))
File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/csv.py", line 149, in _dict_to_list
+ ", ".join(wrong_fields))
ValueError: dict contains fields not in fieldnames: B