2016-05-11 5 views
0

Ich habe eine Datei wie folgt aus:Python: „zu viele Werte zu entpacken“, wenn aufgrund der str.split Zuordnung()

a  hello 
b  goodbye 
c  submarine 

Ich möchte wie diese es in ein Wörterbuch speichern:

file = {'a': 'hello', 'b': 'goodbye', 'c': 'submarine'} 

ich versuchte dies:

file={} 
with open("the actual file") as f: 
    for line in f: 
     key , value = line.split() 
     file[key] = val 

ich erhalte diese Fehlermeldung:

ValueError: too many values to unpack 
+0

Es gibt keinen anderen Text in einem der Linien? – miradulo

Antwort

2

Sieht aus, als ob Sie Zeilen mit mehr als zwei durch Leerzeichen getrennten Wörtern haben, wie z.

a  hello 
b  goodbye 
c  submarine 
d  some words 

line.split() würde die letzte Zeile oben in eine Liste von 3 Artikeln aufgeteilt, ["d", "some", "words"].

Da Sie nur zwei Elemente behandeln können (und wollen), den Schlüssel (erstes Wort) und den Wert (alles andere), müssen wir ein weiteres Argument an die split() Funktion übergeben, die angibt, wie oft die Zeichenfolge aufgeteilt werden soll maximal. Wir wollen zwei Gegenstände, deshalb darf es hier nur einmal geteilt werden. Wir müssen None als erstes Argument hinzufügen, weil wir dann auch ein Trennzeichen angeben müssen, und None ist der Standardwert und repräsentiert alle Arten von Leerzeichen.

Kurz gesagt, ändern Sie den Code Zeile dazu:

 key, value = line.split(None, 1) 
+0

Wenn diese Antwort Ihre Frage löst, vergessen Sie bitte nicht, sie zu akzeptieren, indem Sie auf das graue runde Häkchen-Symbol auf der linken Seite klicken. Falls Sie weitere Fragen haben oder etwas immer noch nicht wie gewünscht funktioniert, lassen Sie es mich in einem Kommentar unten wissen. –

+0

'line.split (2)' ergibt einen TypError, da es die '2' als Trennzeichen behandelt und es kein' str' ist. Außerdem gibt die Zahl an, wie viele Splits (nicht wie viele Elemente es zurückgibt). Du willst eigentlich 'line.split (None, 1)' – SiHa

+0

@SiHa Hoppla, du hast absolut recht. Bearbeiten Sie das. Vielen Dank! –

Verwandte Themen