首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 3-键错误=8

Python 3-键错误=8
EN

Stack Overflow用户
提问于 2018-06-26 11:24:51
回答 1查看 10.7K关注 0票数 2

在代码中运行printDicts()时有以下错误:

代码语言:javascript
复制
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

守则是:

代码语言:javascript
复制
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

我尝试了我所知道的一切,搜索了互联网和所有的东西,却不知道错误是什么,以及如何解决它。错误中的“键”与字典有关吗?如果是,那么错误是什么?这本词典似乎结构很好。如果它与字典无关,那么错误是什么?(对不起,如果英语有错误,这不是我的母语。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-26 11:34:27

显然,lis[0]在运行时包含值8。然后,尝试用8键在d2d3中获取元素。这些字典中的任何一个都不包含具有给定键的元素。这就是引起错误的原因。

您的代码只检查lis[0]是否在d3中,而不检查d2。所以d2一定是罪魁祸首。尝试将代码更改为:

代码语言:javascript
复制
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]]

注意:由于我不确定整个算法的预期逻辑是什么,它可能不会给出您期望的结果。但它应该避免例外。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51041731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档