'zu viele Werte zum Entpacken', iteriert über ein Diktat. key => string, value => list

323

Ich bekomme den 'too many values to unpack'Fehler. Irgendeine Idee, wie ich das beheben kann?

first_names = ['foo', 'bar']
last_names = ['gravy', 'snowman']

fields = {
    'first_names': first_names,
    'last_name': last_names,
}        

for field, possible_values in fields:  # error happens on this line              
tipu
quelle

Antworten:

478

Python 2

Sie müssen so etwas wie verwenden iteritems.

for field, possible_values in fields.iteritems():
    print field, possible_values

In dieser Antwort finden Sie weitere Informationen zum Durchlaufen von Wörterbüchern, z. B. zur Verwendung items()in Python-Versionen.

Python 3

Da Python 3 iteritems() wird nicht mehr unterstützt . Verwenden Sie items()stattdessen.

for field, possible_values in fields.items():
    print(field, possible_values)
Philip Southam
quelle
88
Wenn Sie über ein Wörterbuch iterieren, durchlaufen Sie die Schlüssel und nicht die Schlüssel / Wert-Paare.
Jeff Mercado
1
@ Jeffm das hat mich verwirrt. Ich sah dies als PHP foreach.
Tipu
79

Für Python wurde 3.x iteritemsentfernt. Verwenden Sie stattdessen Elemente .

for field, possible_values in fields.items():
    print(field, possible_values)
Meistro
quelle
37

Sie möchten Iteritems verwenden . Dies gibt einen Iterator über das Wörterbuch zurück, der Ihnen ein Tupel (Schlüssel, Wert) gibt.

>>> for field, values in fields.iteritems():
...     print field, values
... 
first_names ['foo', 'bar']
last_name ['gravy', 'snowman']

Ihr Problem war, dass Sie Felder durchlaufen haben, wodurch die Schlüssel des Wörterbuchs zurückgegeben werden.

>>> for field in fields:
...     print field
... 
first_names
last_name
Mike Lewis
quelle
9

Verwenden Sie für Listen enumerate

for field, possible_values in enumerate(fields):
    print(field, possible_values)

iteritems funktioniert nicht für Listenobjekte

Jordan
quelle
Dies sollte mindestens für Python 2.7 eine korrekte Antwort (getestet) sein.
Dung
1

In Python3 iteritems()wird nicht mehr unterstützt

LÖSUNG1 :

Verwenden .items

for field, possible_values in fields.items():
    print(field, possible_values)

LÖSUNG2 :

Sie können verwendet werden enumerate()als auch

for field, possible_values in enumerate(fields):
    print(field, possible_values)
ishandutta2007
quelle
0

Kann nicht direkt im Wörterbuch iterieren. So können Sie durch Konvertieren in Tupel .

first_names = ['foo', 'bar']
last_names = ['gravy', 'snowman']

fields = {
    'first_names': first_names,
    'last_name': last_names,
         } 
tup_field=tuple(fields.items())
for names in fields.items():
     field,possible_values = names
     tup_possible_values=tuple(possible_values)
     for pvalue in tup_possible_values:
           print (field + "is" + pvalue)
Satya Narayan Pardhi
quelle
Bitte erläutern Sie Ihre Antwort.
Maciej Jureczko
Kann nicht direkt im Wörterbuch iterieren. So können Sie durch Konvertieren in Tupel.
Satya Narayan Pardhi
0

Sie fehlen fields.iteritems()in Ihrem Code.

Sie können es auch auf andere Weise tun, indem Sie Werte mithilfe von Schlüsseln im Wörterbuch abrufen.

for key in fields:
    value = fields[key]
Vaibhav Desai
quelle
0
data = (['President','George','Bush','is','.'],['O','B-PERSON','I-PERSON','O','O'])
corpus = []
for(doc,tags) in data:
    doc_tag = []
    for word,tag in zip(doc,tags):
        doc_tag.append((word,tag))
        corpus.append(doc_tag)
        print(corpus)
Sakshi
quelle
4
Willkommen bei Stack Overflow! Im Allgemeinen sind Antworten viel hilfreicher, wenn sie eine Erklärung enthalten, was der Code tun soll und warum dies das Problem löst, ohne andere einzuführen.
Tim Diekmann