如何遍历enchant Dict对象中的单词?解决迭代报错问题
问题与解决方法
问题说明
我需要统计包含指定子串(如"er""mt")的英文单词数量,期望输出类似countWPP("er")=13540或countWPP("mt")=1。但运行自己编写的代码时触发错误:'Dict' object is not iterable,提示enchant的Dict对象无法直接迭代,不知道如何获取可遍历的单词集合。
原代码
import enchant def countWPP(prompt): #Prompt would be something like "er" or "ua" d = enchant.Dict("en_US") count = 0 for word in d: if d.check(prompt) and prompt in word: count += 1 return count
解决思路与修正代码
enchant的Dict类仅提供拼写检查功能,本身不支持遍历所有单词。要实现需求,需要借助外部单词列表:
方法一:利用系统自带词典文件
多数操作系统会自带纯文本格式的英文单词词典(比如Linux系统的/usr/share/dict/words,Windows用户可自行下载标准英文单词列表文件)。读取该文件的单词,再用Dict验证单词合法性,同时检查是否包含目标子串。
修正后的代码:
import enchant def countWPP(prompt): d = enchant.Dict("en_US") count = 0 # 替换为你的单词词典文件路径 with open('/usr/share/dict/words', 'r') as word_file: for line in word_file: word = line.strip().lower() # 去掉原代码中多余的d.check(prompt),我们不需要验证子串是否是合法单词 if d.check(word) and prompt in word: count += 1 return count
方法二:使用第三方单词列表库
如果不想依赖系统文件,可以安装专门的单词列表类库(如wordlist),直接获取可迭代的英文单词集合,再执行检查统计操作。
内容的提问来源于stack exchange,提问作者FoxStamp
相关产品推荐
相关产品推荐

