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

如何基于字典的键对字符串进行分段遍历匹配?

多字符字典键匹配字符串解决方案

你的问题出在原代码用单字符遍历,但字典里根本没有单个字符的键,自然会报KeyError。要实现按字典中的多字符键从左到右分段匹配,核心是优先尝试长键匹配(避免短键误匹配),逐段截取字符串并拼接对应字符。

实现代码

my_dict = {'010': 'a', '000': 'e', '1101': 'f', '1010': 'h', '1000': 'i', '0111': 'm', '0010': 'n', '1011': 's', '0110': 't', '11001': 'l', '00110': 'o', '10011': 'p', '11000': 'r', '00111': 'u', '10010': 'x'}
word = "1000001001100001100000100000110"
output = ""

# 按键的长度从长到短排序,优先匹配长键避免误判
sorted_keys = sorted(my_dict.keys(), key=lambda k: len(k), reverse=True)

current_str = word
while current_str:
    matched = False
    for key in sorted_keys:
        # 检查当前字符串是否以该键开头
        if current_str.startswith(key):
            output += my_dict[key]
            # 截取匹配后的剩余字符串
            current_str = current_str[len(key):]
            matched = True
            break
    if not matched:
        # 处理无法匹配的异常情况
        raise ValueError(f"无法匹配的字符串片段:{current_str}")

print(output)  # 输出结果:internet

代码说明

  1. 键排序:把字典的按键按长度倒序排列,确保先尝试最长的键,比如如果同时存在1100和11000,会优先匹配11000,避免短键提前占用字符导致后续无法匹配。
  2. 循环匹配:用while循环处理剩余字符串,每次遍历排序后的键,找到匹配的键就拼接对应字符,并截断字符串继续处理剩余部分。
  3. 异常处理:如果遍历所有键都找不到匹配,会抛出错误,避免无限循环,也能及时发现字符串中的无效片段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:05:20