2016-04-30 14 views
0

私は辞書とアルファベットがあります排除言葉が

import string 
alphabet = list(string.ascii_lowercase) 
dictionary = [line.rstrip('\n') for line in open("dictionary.txt")] 

機能では、私は辞書によってフィルタリングする、今、アルファベット

からの手紙を削除しますアルファベットではない文字が含まれている場合は単語を削除します。

私は、forループ試してみました:

for term in dictionary: 
     for char in term: 
      print term, char 
      if char not in alphabet: 
       dictionary.remove(term) 
       break 

ただし、これは特定の単語をスキップ。 私はフィルタ試してみました:

dictionary = filter(term for term in dictionary for char in term if char not in alphabet) 

をしかし、私はエラーを取得する:

SyntaxError: Generator expression must be parenthesized if not sole argument 
+0

フィルターに提供される機能はどうなりますか? –

+1

**辞書**はPythonで非常に特殊な意味を持っています。混乱を避けるために、別の変数名の使用を検討してください。 – CaffeineFueled

答えて

4

あなたはそれを反復処理しているときは、リスト(または実際に任意の容器)を変更する必要はありません。これにより、いくつかのアイテムがスキップされているようなエラーが発生する可能性があります。あなたがコピー(dictionary[:])を作成した場合、それがうまくいかなければならない...

for term in dictionary[:]: 
    for char in term: 
     print term, char 
     if char not in alphabet: 
      dictionary.remove(term) 
      break 

我々は、おそらくまた、それは避けるためにおそらく賢明ですより良いここであまりにも...

alphabet_set = set(alphabet) # set membership testing is faster than string/list... 
new_dictionary = [ 
    term for term in dictionary 
    if all(c in alphabet_set for c in term)] 

を行うことができますインスタンスの場合、名前dictionarydictは実際には組み込み型です...