2012-11-06 54 views
2

我已經收藏了一個名爲「可能」的鍵盤'a' - 'z'的字典。每個鍵都有一個列表中的'a'到'z'的值。基本上,26個字母。遍歷字典中的列表中的字符串PYTHON

我將字符串清理成小寫字母並去掉標點符號,並將每個單詞保存到名爲「已清理的字詞」的列表中。

我想查看列表,如果列表中的單詞只有兩個字母,請從兩個字母單詞中的兩個字母的鍵中移除值'c'。然後移動下一個2個字母的單詞並重復。

這是錯誤的片段:

for y in cleanedWords: 
    if len(y) == 2: 
     for i in y: 
      possible[i].remove('c') 

以下是錯誤:

Traceback (most recent call last): 
    File "F:\python\crypto\cipher.py", line 83, in <module> 
    possible[i].remove('c') 
ValueError: list.remove(x): x not in list 

顯然,我做錯了什麼。有人能指引我朝着正確的方向嗎?我能不能打電話給我,我是怎麼做的?

泰勒

+1

'在'.remove()'之前的循環中打印repr(可能的[i])''。確保'可能[我]'有''c''在裏面。 – Tim

+2

您正在多次調用'possible [i] .remove('c')',可能帶有'i'的重複值(取決於'clearedWords'包含的內容)。正如Tim所說的,你應該在刪除它之前檢查'possible [i]'是否包含'c'。 – del

+0

謝謝你們,我現在看到它。 repr明確表示。 –

回答

1

好吧,我不熟悉你的數據結構(如果你想知道更詳細的答案分享),但它看起來對我來說,你需要更換你的代碼:

for word in (x for x in cleanedWords if len(x) == 2): 
    for ch in word: 
     if 'c' in possible[i]: 
      possible[ch].remove('c') 
+0

'可能[i]'是一個列表,正如回溯所證實的那樣。 – Tim

+0

@Tim謝謝你,修改我的回答 –

0
for y in cleanedWords: 
    if len(y) == 2: 
     print y 
     for i in y: 
      try: 
       possible[i].remove('c') 
      except ValueError: 
       pass 
+0

感謝提示傢伙 –