2017-03-17 3 views
0

Ich nehme eine Textdatei, importiere sie und konvertiere sie in eine Liste von Strings. Dann versuche ich jedes einzelne Wort zu einem Schlüssel zu machen. Ich möchte, dass sie unveränderlich oder Tupel sind. Das Problem, das ich habe, ist das Wort ist immer in Zeichen aufgeteilt. Ich fand eine similar post here aber ohne Wirkung.Umwandlung einer Wortliste in Tupel-gebundene Wörter

Wenn jemand mir helfen könnte und erklären, wo ich falsch liege und warum tuple(word) das gleiche Ergebnis wie tuple(word,) produziert.

with open(f, 'r') as f: 
    clean_str = f.read().translate(None, string.punctuation).lower().split() 
    key_dic = {tuple(word,): [] for word in set(clean_str)} 
    return key_dic 

Datei sagt: Die Katze jagte den Hund.

Ausgang für beide:

{('t', 'h', 'e'): [], ('c', 'a', 't'): [], ('c', 'h', 'a', 's', 'e', 'd'): [], ('d', 'o', 'g'): []} 
+0

Strings sind bereits unveränderlich. –

+0

Ja, ich war wirklich müde, kann nicht glauben, dass ich das gesagt habe. – eeskonivich

Antwort

0

Da tuple wird als eine Funktion benutzt wird, jeder Abschluß Komma wird durch die Funktion Grammatik verbraucht wird, anstatt ein Tupel zu erzeugen.

>>> tuple('foo') 
('f', 'o', 'o') 
>>> tuple('foo',) 
('f', 'o', 'o') 
>>> tuple(('foo',)) 
('foo',) 

Aber Sie brauchen nicht tuple() aufzurufen:

>>> {('foo',) : 'bar'} 
{('foo',): 'bar'} 
+0

Okay, das macht Sinn, aber das resultierende Tupel enthält das abschließende Komma. Gibt es eine Möglichkeit, ein Tupel für jedes Wort zu erstellen, das das Komma nicht enthält? – eeskonivich

+0

Nein. Das Übergeben einer Sequenz an 'tuple()' führt zu einem Tupel, bei dem jedes Element ein Element der ursprünglichen Sequenz ist. –

Verwandte Themen