2016-04-30 6 views
0

ein Wörterbuch und ein Alphabet haben:Beseitigung Wörter auf Letters Basierend

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

In einer Funktion, entferne ich einen Brief aus dem Alphabet

Nun, ich durch das Wörterbuch filternde um Wörter zu eliminieren, wenn sie einen Buchstaben enthalten, der nicht im Alphabet enthalten ist.

Ich habe versucht, für Schleifen:

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

Dies ist jedoch überspringt bestimmte Wörter. Ich habe versucht, Filter:

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

Aber ich bekomme die Fehlermeldung:

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

Was ist mit der Funktion zu filtern? –

+1

** Wörterbuch ** hat eine sehr spezifische Bedeutung in Python. Erwägen Sie die Verwendung eines anderen Variablennamens, um Verwechslungen zu vermeiden. – CaffeineFueled

Antwort

4

Sie wollen nicht eine Liste (oder wirklich alle Behälter) ändern, während Sie über sie iterieren. Dies kann zu Fehlern führen, wenn einige Artikel übersprungen werden. Wenn Sie eine Kopie (dictionary[:]) zu machen, sollte es klappen ...

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

Wir wahrscheinlich auch hier besser machen können ...

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)] 

Außerdem ist es wahrscheinlich sinnvoll, das vermeiden Name dictionary für eine list Instanz seit dict ist eigentlich ein eingebauter Typ ...

Verwandte Themen