我遇到了一个简单的问题。我有一本英语单词词典,还有一个要检查的示例文本。我必须根据字典检查示例中的每个单词,而我使用的代码是错误的。
for word in checkList: # iterates through every word in the sample
if word not in refDict: # checks if word is not in the dictionary
print word # just to see if it's recognizing misspelled words
唯一的问题是,当它通过循环时会打印出每个单词,而不仅仅是拼写错误的单词。有人可以解释这个并提供解决方案吗?非常感谢你!
答案 0 :(得分:6)
您拥有的代码段功能齐全。参见例如
>>> refDict = {'alpha':1, 'bravo':2, 'charlie':3, 'delta':4}
>>> s = 'he said bravo to charlie O\'Brian and jack Alpha'
>>> for word in s.split():
... if word not in refDict:
... print(repr(word)) # by temporarily using repr() we can see exactly
... # what the words are like
...
'he'
'said'
'to'
"O'Brian"
'and'
'jack'
'Alpha' # note how Alpha was not found in refDict (u/l case difference)
因此,字典内容必须与您的想法不同,或者核对清单之外的单词不会出现 (例如,使用空格或大小写;请参阅repr()的使用( *)在print语句中帮助识别前者的案例。
调试建议:关注清单中的第一个单词(或者您怀疑在字典中找到的第一个单词)。然后对于这个单词和这个单词,打印出详细信息,其长度,两边都有括号等,用于清单中的单词和字典中的相应键...
(*)repr()是John Machin的建议。相反,我经常使用括号或其他字符,如print('['+ word +']'),但repr()在输出中更严格。
答案 1 :(得分:5)
考虑剥离可能存在的任何空格的单词,并将两个集合中的所有单词更改为相同的单词。像这样:
word.strip().lower()
通过这种方式,您可以确保将苹果与苹果进行比较。
答案 2 :(得分:2)
显然,“不在refDict中的单词”总是评估为True。这可能是因为refDict或checkList的内容不是你认为的那样。它们是元组还是字符串列表?
答案 3 :(得分:1)
如果refDict
中的键是拼写正确的单词,那么您所拥有的代码就可以使用。如果拼写正确的单词是你的dict中的值,那么你需要这样的东西:
for word in checkList:
if word not in refDict.values():
print word
是否有理由将字典存储为映射而不是列表或集合? python dict包含名称 - 值对,例如我可以使用此映射:{"dog":23, "cat":45, "pony":67}
来存储在某本书中找到的单词和页码的索引。在你的情况下,你的dict是什么的映射?
答案 4 :(得分:0)
refdict中的单词是键还是值?
您的代码只能看到密钥:例如:
refDict = { 'w':'x', 'y':'z' }
for word in [ 'w','x','y','z' ]:
if word not in refDict:
print word
打印:
x
z
你想要的;
如果单词不在refDict.values()
中当然,这假设您的词典是一个实际的python词典,这似乎是存储单词列表的奇怪方式。
答案 5 :(得分:0)
您的refDict
可能不对。 in
关键字检查值是否在字典的键中。我相信你已经把你的话放在了价值观中。
我建议使用set
而不是字典。
knownwords = set("dog", "cat")
knownwords.add("apple")
text = "The dog eats an apple."
for word in text.split(" "):
# to ignore case word is converted to lowercase
if word.lower() not in knownwords:
print word
# The
# eats
# an
# apple. <- doesn't work because of the dot