在代码中运行printDicts()时有以下错误:
Traceback (most recent call last):
File "Desktop\PythonApplication1\PythonApplication1\exercise3.py", line 238, in <module>
main()
File "Desktop\PythonApplication1\PythonApplication1\exercise3.py", line 232, in main
choisesDict[choise]()
File "Desktop\PythonApplication1\PythonApplication1\exercise3.py", line 206, in printDicts
d = add3dicts(d1,d2,d3)
File "Desktop\PythonApplication1\PythonApplication1\exercise3.py", line 198, in add3dicts
addD3(list(d3.keys()))
File "Desktop\PythonApplication1\PythonApplication1\exercise3.py", line 194, in addD3
return addD2(lis[1:])
File "Desktop\PythonApplication1\PythonApplication1\exercise3.py", line 184, in addD2
returnDic[lis[0]] = insert2(d2[lis[0]],d3[lis[0]])
KeyError: 8守则是:
def add3dicts(d1,d2,d3):
insert3 = lambda x,y,z:tuple(set({x,y,z}))
insert2 = lambda x,y: tuple(set({x,y}))
returnDic = dict()
def addD1(lis):
if lis == []:
return
if(lis[0] in d2 and lis[0] in d3):
returnDic[lis[0]] = insert3(d1[lis[0]],d2[lis[0]],d3[lis[0]])
d2.pop(lis[0])
d3.pop(lis[0])
elif(lis[0] in d2):
returnDic[lis[0]] = insert2(d1[lis[0]],d2[lis[0]])
d2.pop(lis[0])
elif(lis[0] in d3):
returnDic[lis[0]] = insert2(d1[lis[0]],d3,[lis[0]])
d3.pop(lis[0])
else:
returnDic[lis[0]] = d1[lis[0]]
return addD1(lis[1:])
def addD2(lis):
if lis == []:
return
if(lis[0] in d3):
returnDic[lis[0]] = insert2(d2[lis[0]],d3[lis[0]])
d3.pop(lis[0])
else:
returnDic[lis[0]] = d2[lis[0]]
return addD2(lis[1:])
def addD3(lis):
if lis == []:
return
returnDic[lis[0]] = d3[lis[0]]
return addD2(lis[1:])
addD1(list(d1.keys()))
addD2(list(d2.keys()))
addD3(list(d3.keys()))
return returnDic
def printDicts():
d1 = eval(input("Please enter the first dictionary:"))
d2 = eval(input("Please enter the second dictionary:"))
d3 = eval(input("Please enter the third dictionary:"))
print("The merged dictionary is:")
d = add3dicts(d1,d2,d3)
print(d)
return我尝试了我所知道的一切,搜索了互联网和所有的东西,却不知道错误是什么,以及如何解决它。错误中的“键”与字典有关吗?如果是,那么错误是什么?这本词典似乎结构很好。如果它与字典无关,那么错误是什么?(对不起,如果英语有错误,这不是我的母语。)
发布于 2018-06-26 11:34:27
显然,lis[0]在运行时包含值8。然后,尝试用8键在d2和d3中获取元素。这些字典中的任何一个都不包含具有给定键的元素。这就是引起错误的原因。
您的代码只检查lis[0]是否在d3中,而不检查d2。所以d2一定是罪魁祸首。尝试将代码更改为:
def addD2(lis):
if lis == []:
return
if(lis[0] in d3 and lis[0] in d2):
returnDic[lis[0]] = insert2(d2[lis[0]],d3[lis[0]])
d3.pop(lis[0])
elif lis[0] in d2:
returnDic[lis[0]] = d2[lis[0]]注意:由于我不确定整个算法的预期逻辑是什么,它可能不会给出您期望的结果。但它应该避免例外。
https://stackoverflow.com/questions/51041731
复制相似问题