f5520916 2023-08-29 23:10 采纳率: 40%
浏览 3
已结题

关于#python#的问题:KeyError: 28

  File “.py", line 57, in decode_article
    buffer = decoding_table[code - 1]

这个是出错的提示,代码附上,求改正

# 统计文章中每个字符出现的次数
def count_characters(text):
    char_count = collections.Counter(text)
    return char_count

def count_character(article):
    char_count = {}
    for char in article:
        if char in char_count:
            char_count[char] += 1
        else:
            char_count[char] = 1
    return char_count
# 构造编码表,其中编号从0开始,按字符出现次数从大到小排列
def build_encoding_table(char_count):
    encoding_table = {}
    code = 0
    for char, count in sorted(char_count.items(), key=lambda x: x[1], reverse=True):
        encoding_table[char] = code
        code += 1
    return encoding_table

# 对文章进行词典编码
def encode_article(article, encoding_table):
    encoded_data = []
    buffer = ''
    for char in article:
        if buffer + char in encoding_table:
            buffer += char
        else:
            encoded_data.append(encoding_table[buffer])
            encoding_table[buffer + char] = len(encoding_table)
            buffer = char
    encoded_data.append(encoding_table[buffer])
    return encoded_data

# 对编码结果进行解码
def decode_article(encoded_data, decoding_table):
    decoded_article = ''
    buffer = ''
    for code in encoded_data:
        if code in decoding_table:
            decoded_article += decoding_table[code]
            if buffer:
                decoding_table[len(decoding_table)] = buffer + decoding_table[code][0]
                buffer = ''
        else:
            buffer = decoding_table[code - 1]
            decoded_article += buffer
            decoding_table[len(decoding_table)] = buffer + buffer[0]
            buffer = ''
    return decoded_article
  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-08-29 23:15
    关注

    引用 皆我百晓生 小程序回复内容作答:
    在代码中出现KeyError: 28的错误是因为在decode_article函数中,buffer变量被赋值为decoding_table[code - 1],但是在某些情况下,decoding_table中可能没有key为code - 1的项。

    为了修复这个错误,你可以添加一个条件判断来检查code - 1是否是decoding_table的key。如果不存在,你可以将buffer设置为一个默认值,比如空字符串。

    修改后的代码如下所示:

    def decode_article(encoded_data, decoding_table):
        decoded_article = ''
        buffer = ''
        for code in encoded_data:
            if code in decoding_table:
                decoded_article += decoding_table[code]
                if buffer:
                    decoding_table[len(decoding_table)] = buffer + decoding_table[code][0]
                    buffer = ''
            else:
                if code - 1 in decoding_table:
                    buffer = decoding_table[code - 1]
                    decoded_article += buffer
                    decoding_table[len(decoding_table)] = buffer + buffer[0]
                    buffer = ''
                else:
                    buffer = ''
        return decoded_article
    

    这样修改后的代码应该能够避免出现KeyError: 28的错误。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月7日
  • 已采纳回答 8月30日
  • 创建了问题 8月29日

悬赏问题

  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画
  • ¥15 hadoop中启动hive报错如下怎么解决
  • ¥15 如何优化QWebEngineView 加载url的速度
  • ¥15 关于#hadoop#的问题,请各位专家解答!
  • ¥15 如何批量抓取网站信息