Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

KeyError in Python though the key exists in dictionary

I am solving a leetcode problem 17. Letter Combinations of a Phone Number. I have coded this solution using 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)

But I am stuck with this keyerror:

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)

I have also seen with this line print(f"transform.keys()={transform.keys()}"). I am getting transform.keys()=dict_keys([2, 3, 4, 5, 6, 7, 8, 9]) as stdout. Here the key 2 is present. But I can’t understand why the KeyError: ‘2’ is raised.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Please help me how to fix this error.

>Solution :

you haven’t given us the full code, such as ways that you are calling the class.

If I understand correctly, the reason is because you’re setting the key to be an integer, such as 2 or 3, however the digits variable is of type string, and when you try to access transform[digits[idx]], you are treating digits[idx] as if it were an integer too. However, in Python, indexing a string returns a character, not an integer. That’s why you are getting a KeyError.

Try this code instead, please tell me if it does not work, and tell us the full code, as in how you’re calling it:

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)
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading