辞書の内容を出力することについては、ここにたくさんの投稿があります。私は実際に自分の問題に対する非最適な解決策を見つけました(以下に示すように)が、私の非最適な解決策が機能した理由に最も興味があります。
これが私のコードです:
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)
私の目標は、辞書を1つだけ持つことでした。しかし、辞書の内容を出力しようとすると、「B」に関してValueErrorが発生し続けました。私はいくつかの解決策を試しましたが、最良の解決策は、同じ正確な出力を2回出力するだけで、出力ファイルを開いたときに正確な重複を削除できる2番目の辞書を追加することでした。これはひどい習慣だと私は知っていますが、それは私が持っていた最も迅速な解決策であり、しばらくの間これに巻き込まれるのは残念でした。
この場合、なぜ2番目の辞書を追加すると機能するのですか?辞書が1つだけ使用されている場合、このコードがValueErrorをスローする理由はわかりませんが、2つある場合は正常に機能します(重複する行を除いて、削除する必要があります)。
編集
動作しないコードは次の行でした:
for answer in (dictionary):
Martijnが親切に指摘しているように、これは1つの辞書のキーをループするだけです。
EDIT2
また、トレースバックエラーは次のとおりです。
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