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

Python匹配字典键对值求和结果异常的问题排查与修复

Python字典键匹配后分值求和异常修复

问题现象

实现文本关键词匹配对应分值求和逻辑时,测试输入文本为bread sourdough crusts,预期求和结果为17,实际运行输出为20,结果不符合预期。
涉及的原有代码片段如下:

  • 输入获取代码
text=input("Enter your text here: )
  • 分值字典定义
bread = {"bread": 7, "sourdough crusts": 10}
  • 正则匹配代码
result = re.findall('|'.join(bread), text)
  • 错误求和代码
for sentence, rating in bread.items():
     ssum = 0
     for i in range(len(result)):
           ssum = ssum + rating
print("Sum: " + str(ssum))

错误原因

代码存在两处核心逻辑错误,另有一处正则匹配的隐藏隐患:

  1. 求和变量初始化位置错误:ssum = 0被写在遍历字典的外层循环内部,每次切换遍历的键值对时,之前累加的结果会被直接清零,最终输出的只是最后一个遍历到的分值的计算结果。
  2. 累加逻辑和匹配结果完全脱钩:内层循环仅按照匹配结果列表的长度做固定次数的分值累加,完全不校验当前遍历的字典键和实际匹配到的内容是否对应,相当于只要匹配列表有N个元素,就把当前字典项的分值重复加N次。
    以测试用例为例:遍历到第二个键值对("sourdough crusts", 10)时,ssum被重置为0,匹配结果长度为2就累加2次10,最终得到错误结果20。
  3. 正则匹配隐患:直接拼接字典键生成正则多选分支时,默认按字典遍历顺序匹配,若短键排在长键前面,会提前截断长词组的内容,导致长关键词匹配失败,带来额外的计算错误。

修复方案

按照以下逻辑调整代码即可得到正确结果:

  • 将求和变量的初始化移到所有循环外部,避免累加值被意外重置
  • 直接遍历正则匹配到的所有关键词,从字典中取对应分值累加,不需要双层循环遍历字典
  • 生成正则时对关键词按长度降序排序,优先匹配更长的词组,避免短键截断长键
  • 补全原有代码中input函数缺失的引号,记得提前导入re模块

修复后的完整可运行代码:

import re

# 获取输入文本,可在此处补充移除标点、自动纠错的预处理逻辑
text = input("Enter your text here: ")

# 定义关键词对应分值
score_map = {"bread": 7, "sourdough crusts": 10}

# 生成长度优先匹配的正则表达式
pattern = '|'.join(sorted(score_map.keys(), key=lambda x: len(x), reverse=True))
matched_keys = re.findall(pattern, text)

# 计算总分
total = sum(score_map[key] for key in matched_keys)
print(f"Sum: {total}")

使用测试用例bread sourdough crusts运行上述代码,会正确匹配到['bread', 'sourdough crusts']两个关键词,累加得到17,符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 20:48:47