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

Python中如何用两个字典替换文本?代码仅替换两处内容该如何解决?

问题分析与解决办法

你的代码现在有两个明显问题,导致替换不符合预期:

  • 多词匹配失效:用text.split()把字符串按空格拆成单个词后,字典里的'test 2'是两个词组成的键,拆分后根本匹配不到,自然没法替换成333。
  • 重复处理输出:每个文本会循环遍历两个字典,每次用一个字典替换完就直接打印,所以一个文本会输出两次结果,而不是把两个字典的替换规则合起来用。

修正方案

方法1:适配多词键的替换(正确匹配test 2)

如果需求是把test 2整个替换成333,得用正则匹配完整的键,避免拆分破坏多词结构,同时合并两个字典的规则一次性替换:

import re

# 合并两个字典,统一替换规则
combined_rules = {**{'test 2': '333','m': 'mm'}, **{'sss': 'n','help': '5'}}
# 生成正则匹配规则,优先匹配长键,防止短键先匹配吃掉长键的部分
match_pattern = re.compile(r'\b(' + '|'.join(re.escape(key) for key in sorted(combined_rules.keys(), key=len, reverse=True)) + r')\b')

texts = ["test 2 text m and text", "text help sss"]

for text in texts:
    # 用正则替换所有匹配到的键
    result = match_pattern.sub(lambda match: combined_rules[match.group()], text)
    print(result)

运行后输出:

333 text mm and text
text 5 n

方法2:单独替换test为333(符合你的预期输出)

要是预期输出里的333 2是指只替换test,说明字典的键写错了,把'test 2'改成'test',合并字典后用拆分替换的方式即可:

# 修正字典键,合并规则
combined_rules = {**{'test': '333','m': 'mm'}, **{'sss': 'n','help': '5'}}
texts = ["test 2 text m and text", "text help sss"]

for text in texts:
    # 拆分后逐个替换
    result = " ".join(combined_rules.get(word, word) for word in text.split())
    print(result)

此时输出和你预期的一致:

333 2 text mm and text
text 5 n

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:10:36