'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              

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)

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)

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

9

Verwenden Sie für Listen enumerate

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

iteritems funktioniert nicht für Listenobjekte


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)

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)

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]

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)

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.