You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python字典存在对应键却触发KeyError问题求助(LeetCode17题)

问题分析与修复方案

1. KeyError 根源

你的字典transform使用整数类型(如2)作为键,但输入参数digits是字符串类型,digits[idx]取出的是字符串形式的数字(如'2')。由于字典中不存在'2'这个字符串键,因此触发KeyError: '2'。

2. 修复步骤

方法一:将字典键改为字符串类型

直接把transform的键改为对应字符串,和输入的数字格式保持一致:

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

方法二:将字符串数字转为整数

如果坚持用整数键,可以在取值时转换类型:

letters = transform[int(digits[idx])]

3. 递归逻辑的额外错误

除了KeyError,你的递归逻辑还有功能缺陷:当输入单个数字(如"2")时,会返回空列表。原因是递归终止条件返回[],导致最底层递归没有提供拼接的基础。需要修改:

  • 终止条件:当idx == len(digits)时,返回[""](空字符串,作为拼接的基础)
  • 拼接逻辑:将letter + ele的结果添加到结果列表,而不是仅修改ele但不保存

修正后的完整代码

from typing import List

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if not digits:  # 处理空输入的边界情况
            return []
            
        transform = {
            '2': ["a","b","c"],
            '3': ["d","e","f"],
            '4': ["g","h","i"],
            '5': ["j","k","l"],
            '6': ["m","n","o"],
            '7': ["p","q","r","s"],
            '8': ["t","u","v"],
            '9': ["w","x","y","z"]
        }

        def fun(digits, idx):
            if idx == len(digits):
                return [""]  # 返回空字符串作为拼接基础
            current_digit = digits[idx]
            letters = transform[current_digit]
            ans = []

            for letter in letters:
                # 递归获取后续数字的组合
                temp = fun(digits, idx + 1)
                # 将当前字母与后续组合拼接
                for ele in temp:
                    ans.append(letter + ele)

            return ans

        return fun(digits, 0)

关键修改说明

  • 新增空输入判断:题目要求输入空字符串时返回空列表
  • 字典键改为字符串,匹配输入格式
  • 递归终止返回[""],确保单个数字能正确生成字母列表
  • 拼接后直接将结果添加到ans,而不是修改ele后丢弃

内容的提问来源于stack exchange,提问作者Wreetbhas Pal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 14:45:31