如何修改Python脚本实现匹配关键词时循环遍历字典对应值完成替换
解决方案
核心思路是为每个待替换关键词的取值列表维护一个循环遍历的指针,每次匹配到关键词时按指针位置取值,再将指针后移,超出列表长度就重置到开头,用Python内置的itertools.cycle可以非常简洁地实现这个效果。
修改后完整代码
from itertools import cycle word_replacement = {'rat':['pat', 'grey', 'squeeky']} # 预处理替换字典,将每个值列表转为循环迭代器 replace_iters = {k: cycle(v) for k, v in word_replacement.items()} with open("main.txt", 'r', encoding='utf-8') as main: words = main.read().split() replaced = [] for y in words: if y in replace_iters: # 每次匹配到关键词,取迭代器的下一个值,自动循环 replaced.append(next(replace_iters[y])) else: replaced.append(y) text = ' '.join(replaced) print(text) with open("main.txt", 'w', encoding='utf-8') as new_main: new_main.write(text)
代码说明
- 如果你不想引入额外模块,也可以自己给每个关键词维护一个计数器,每次匹配后计数器加1,取值时用
计数器 % 列表长度作为索引,效果完全一致,只是用cycle写法更简洁 - 你给出的示例输入运行后输出正好符合预期:
pat went to the grey park to play with squeeky friends at the pat party - 优化了文件操作逻辑,统一使用
with上下文管理器,不需要手动调用close()方法,避免异常场景下的文件资源泄漏
内容的提问来源于stack exchange,提问作者bgdon
相关产品推荐
相关产品推荐

