2009-11-02 33 views
0

我被困在一个简单的问题上。我有一本英文单词词典和一个要检查的示例文本。我必须检查样本中字典的每一个字,并且我使用的代码是错误的。使用Python来检查单词

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 

唯一的问题是,因为它通过循环它打印出每一个字,不只是拼写错误的。有人可以解释这一点并提供解决方案吗?非常感谢!

+5

看起来'word'总是'not in refDict'。 'refDict'是否正确初始化?尝试打印出来。 – 2009-11-02 19:25:05

+0

在SO上发布代码的提示:突出显示您的代码并使用101/010按钮 – 2009-11-02 19:25:21

+1

老实说,我最好的猜测是这些词不在词典中。 你能复制一个小的文字大小和字典吗?如果是这样,请打印字典以验证条目是否存在。请记住,“in”会检查字典键,所以如果您已将字样作为其他键添加到值中,您将无法获得匹配... – 2009-11-02 19:25:36

回答

2

显然“这个词不是refDict”结果始终为true。这可能是因为refDict或checkList的内容不是您认为的内容。他们是元组还是字符串列表?

5

考虑剥离的可能是存在的任何空白的话,改变两套的话都相同的情况下。像这样:

word.strip().lower() 

这样,你可以确保你比较苹果和苹果。

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) 

因此,词典内容必须从你的想法不同,或讲出了检查单都没有,因为他们出现正是(例如,用空格或资本;看到使用再版的( )(*)在印刷声明中帮助识别前者的情况)。

调试建议:从清单中的第一个字FOCUS(或第一,你怀疑是在字典中才能找到)。然后,对于这个词,只这个词,将其打印在细节,与它的长度,与托架在两侧等,对于这个词清单和在词典中对应的键...

(*) repr()是John Machin的建议。相反,我经常使用括号或其他字符('['+ word +']'),但repr()在输出中更加严格。

+0

@mjv:re“print ... with brackets in any side”:当调试时使用内置函数'repr(word)'在2中获得明确输出的更好方法.x和3.x中的'ascii(word)'。 – 2009-11-02 21:40:22

+1

@mjv:re repr和不同类型的引号:它不是含糊不清的,它是精确的;你的每个例子都被eval()转换成正确的字符串。 IOW可以将repr()或ascii()输出粘贴到代码中,并获得正确的结果。如果数据中有括号,并且如果数据包含的字符不是可打印的ASCII字符,则不适合在此类论坛中使用,这种保证不适用于括号引用方法。你看到的往往不是你所拥有的。 “用于调试目的”需求精度;这不是品味的问题。 – 2009-11-02 23:48:15

+0

@John Machin。你做的好点。 “含糊不清”是一个糟糕的选择。我会修改我的回复,以使用repr()代替。 – mjv 2009-11-03 00:35:03

1

你如果refDict键是正确拼写的单词会工作的代码。如果正确拼写单词在字典的值,那么你需要的东西是这样的:

for word in checkList: 
    if word not in refDict.values(): 
     print word 

你有什么字典存储为一个映射,而不是一个列表或一组原因是什么?一个python字典包含名称 - 值对,例如我可以使用这个映射:{"dog":23, "cat":45, "pony":67}来存储它在某些书中找到的单词和页码的索引。在你的情况下,你的字典是什么东西的映射?

0

是在refDict键或值的话吗?

您的代码将只看到按键:例如: -

refDict = { 'w':'x', 'y':'z' } 
for word in [ 'w','x','y','z' ]: 
    if word not in refDict: 
    print word 

打印:

x 
z 

Othewise想要;

如果单词不在refDict中。值()

当然这假设您的字典是一个实际的Python字典,这似乎是一种奇怪的方式来存储单词列表。

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