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

请求修复Python的get_triples_dict函数以实现三元组统计功能

修复get_triples_dict()函数的方案

我帮你排查了原代码里的问题,主要有两处导致输出不正确:

  • 遍历字典键的时候,直接操作dict.keys()视图对象并同时修改字典,会引发遍历异常,而且你访问键的方式triples_dict[keys]是错误的(keys是键的集合,不是单个键)
  • 在循环删除键时,手动调整索引i = i -1的方式在Python的for循环里并不生效,因为循环的迭代器是预先生成的

下面是修复后的完整代码,我保留了你的核心逻辑,只修正了错误的部分:

def get_triples_dict(text):
    triples_dict = {}
    mod_text = ""
    # 处理文本:仅保留字母并转为小写
    for char in text:
        if char.isalpha():
            mod_text += char.lower()
    # 长度不足3直接返回空字典
    if len(mod_text) < 3:
        return triples_dict
    # 统计所有三元组的出现次数
    for i in range(len(mod_text) - 2):
        triple = mod_text[i:i+3]
        triples_dict[triple] = triples_dict.get(triple, 0) + 1
    # 过滤掉出现次数<=1的键值对,用字典推导式更简洁安全
    triples_dict = {k: v for k, v in triples_dict.items() if v > 1}
    return triples_dict

def test_get_triples_dict():
    print("1.")
    print_dict_in_key_order(get_triples_dict('super, duper'))
    print("\n2.")
    print_dict_in_key_order(get_triples_dict("ABC ABC ABC"))
    print("\n3.")
    print_dict_in_key_order(get_triples_dict("Sometimes the smallest things make more room in your heart"))
    print("\n4.")
    print_dict_in_key_order(get_triples_dict("My favourite painting is the painting i did of my dog in that painting in my den"))

# 补充测试所需的辅助函数(原代码未提供)
def print_dict_in_key_order(d):
    for key in sorted(d.keys()):
        print(f"{key}: {d[key]}")

关键修改点说明:

  • 把遍历文本的方式从range(len(text))改成直接遍历字符for char in text,代码更简洁易读
  • 统计三元组时用dict.get()方法,避免了繁琐的if-else判断,一行搞定计数逻辑
  • 最后过滤字典用字典推导式,这是Python里处理这类过滤最安全高效的方式,彻底避免了遍历字典时修改字典的风险
  • 提前判断文本长度不足3的情况,直接返回空字典,逻辑更清晰

这样修改后,你的测试用例应该能得到预期的输出了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:08:56