Python 中的 KeyError 尽管键存在于字典中[重复]

问题描述 投票:0回答:1

我正在解决一道leetcode问题17。电话号码的字母组合。我已经使用 Python3 编写了这个解决方案。

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        transform={}

        transform[2]=["a","b","c"]
        transform[3]=["d","e","f"]
        transform[4]=["g","h","i"]
        transform[5]=["j","k","l"]
        transform[6]=["m","n","o"]
        transform[7]=["p","q","r","s"]
        transform[8]=["t","u","v"]
        transform[9]=["w","x","y","z"]

        def fun(digits,idx):
            if idx==len(digits):
                return []
            letters=transform[digits[idx]]
            ans=[]

            for letter in letters:
                temp=fun(digits,idx+1)
                for ele in temp:
                    ele=letter+ele
                ans+=temp

            return ans

        return fun(digits,0)

但是我遇到了这个关键错误:

KeyError: '2'
    letters=transform[digits[idx]]
Line 17 in fun (Solution.py)
    return fun(digits,0)
Line 28 in letterCombinations (Solution.py)
    ret = Solution().letterCombinations(param_1)
Line 47 in _driver (Solution.py)
    _driver()
Line 58 in <module> (Solution.py)

我也见过这条线

print(f"transform.keys()={transform.keys()}")
。我将
transform.keys()=dict_keys([2, 3, 4, 5, 6, 7, 8, 9])
作为标准输出。这里出现了密钥 2。但我不明白为什么会出现 KeyError: '2' 。

请帮助我如何修复此错误。

python python-3.x dictionary keyerror
1个回答
0
投票

您还没有给我们完整的代码,例如您调用该类的方式。

如果我理解正确的话,原因是因为您将键设置为整数,例如2或3,但是digits变量是字符串类型,并且当您尝试访问transform[digits[idx]]时,您也将digits[idx] 视为整数。但是,在 Python 中,对字符串进行索引会返回字符,而不是整数。这就是你收到 KeyError 的原因。

尝试使用此代码,如果它不起作用,请告诉我,并告诉我们完整的代码,就像您如何调用它一样:

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        transform = {}

        transform[2] = ["a", "b", "c"]
        transform[3] = ["d", "e", "f"]
        transform[4] = ["g", "h", "i"]
        transform[5] = ["j", "k", "l"]
        transform[6] = ["m", "n", "o"]
        transform[7] = ["p", "q", "r", "s"]
        transform[8] = ["t", "u", "v"]
        transform[9] = ["w", "x", "y", "z"]

        def fun(digits, idx):
            if idx == len(digits):
                return []
            letters = transform[int(digits[idx])]
            ans = []

            for letter in letters:
                temp = fun(digits, idx + 1)
                for ele in temp:
                    ele = letter + ele
                ans += temp

            return ans

        return fun(digits, 0)
© www.soinside.com 2019 - 2024. All rights reserved.