2009-11-02 50 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 
相關問題