输出Python字典的内容

输出Python字典的内容,python,csv,Python,Csv,这里有很多关于输出字典内容的帖子。事实上,我为我的问题找到了一个非最优的解决方案(如下所示),但我最感兴趣的是为什么我的非最优解决方案有效 这是我的密码: 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

这里有很多关于输出字典内容的帖子。事实上,我为我的问题找到了一个非最优的解决方案(如下所示),但我最感兴趣的是为什么我的非最优解决方案有效

这是我的密码:

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,但如果使用了两个字典,它就可以正常工作(除了重复的行,我必须删除)

编辑

非工作代码如下所示:

for answer in (dictionary):
正如Martijn善意地指出的,它只是在一本字典的键上循环

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
回溯(最近一次呼叫最后一次):
文件“File.py”,第41行,在
w、 writerow(回答)
writerow中的文件“/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/csv.py”,第153行
返回self.writer.writerow(self.\u dict\u to\u list(rowdict))
文件“/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/csv.py”,第149行,在目录列表中
+“,”.join(错误的_字段))
ValueError:dict包含字段名称中不包含的字段:B

您创建了一个要循环的元组:

for answer in (dictionary, dictionary2):
以前,您可能试图循环浏览字典:

for answer in dictionary:
或许:

for answer in (dictionary):
这是行不通的;然后,只循环一本字典的键。由于您没有包含不起作用的代码,我们只能推测这一点

直接编写一本字典,不循环:

w.writeheader()
w.writerow(dictionary)
或者使用一个元素元组:

for answer in (dictionary,):
    w.writerow(answer)
请参阅以了解为什么额外的逗号在此处很重要。在Python中,表达式周围的括号是可选的,只需将表达式分组以跨行或表示优先级;要使其成为元组,至少需要一个逗号


另一方面,
namererror
几乎总是指向简单的打字错误;也许你忘了引用字典中的
“B”
键。同样,没有回溯,这纯粹是推测。

您创建了一个元组来循环:

for answer in (dictionary, dictionary2):
以前,您可能试图循环浏览字典:

for answer in dictionary:
或许:

for answer in (dictionary):
这是行不通的;然后,只循环一本字典的键。由于您没有包含不起作用的代码,我们只能推测这一点

直接编写一本字典,不循环:

w.writeheader()
w.writerow(dictionary)
或者使用一个元素元组:

for answer in (dictionary,):
    w.writerow(answer)
请参阅以了解为什么额外的逗号在此处很重要。在Python中,表达式周围的括号是可选的,只需将表达式分组以跨行或表示优先级;要使其成为元组,至少需要一个逗号


另一方面,
namererror
几乎总是指向简单的打字错误;也许你忘了引用字典中的
“B”
键。同样,没有回溯,这纯粹是猜测。

请提供完整的回溯和非工作代码,以便我们能够帮助您;您可能是偶然创建了工作代码,而不是因为偶然发现了一些奇怪的技巧。:-)供将来参考:
namererror
ValueError
非常不同。感谢您的帮助,Martijn请提供完整的回溯和非工作代码,以便我们能够帮助您;您可能是偶然创建了工作代码,而不是因为偶然发现了一些奇怪的技巧。:-)供将来参考:
namererror
ValueError
有很大不同。感谢您的帮助,MartijnI以前确实尝试过循环使用字典。我会把它添加到我的问题中,这样其他阅读它的人就可以在上面看到它。谢谢Martijn。你能解释一下为什么在(字典)中的答案不起作用,但在(字典)中的答案起作用吗?您说过第一个实例只是在一个字典的键上循环,但是后一个实例中的逗号对计算机意味着什么,这样它就知道在一个字典的键和值上循环?
(dictionary)
只是计算为
dictionary
:它不是元组<另一方面,code>(dictionary,),是一个包含一个元素的元组。当您在(dictionary,)
中对答案执行
操作时,您是在对元组进行迭代,而不是在对dictionary进行迭代。由于只有一个项,它将只迭代一次(
answer`将被设置为
dictionary
,然后循环将停止)。事实上,我以前确实尝试过循环字典。我会把它添加到我的问题中,这样其他阅读它的人就可以在上面看到它。谢谢Martijn。你能解释一下为什么在(字典)中的答案不起作用,但在(字典)中的答案起作用吗?您说过第一个实例只是在一个字典的键上循环,但是后一个实例中的逗号对计算机意味着什么,这样它就知道在一个字典的键和值上循环?
(dictionary)
只是计算为
dictionary
:它不是元组<另一方面,code>(dictionary,)
,是一个包含一个元素的元组。当您在(dictionary,)
中对答案执行
操作时,您是在对元组进行迭代,而不是在对dictionary进行迭代。由于只有一个项,它将只迭代一次(
answer`将设置为
dictionary
,然后循环将停止)。