Primesc 'too many values to unpack'
eroare. Aveți vreo idee despre cum pot rezolva acest lucru?
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
Python 2
Trebuie să utilizați ceva de genul iteritems
.
for field, possible_values in fields.iteritems():
print field, possible_values
Vedeți acest răspuns pentru mai multe informații despre iterarea prin dicționare, cum ar fi utilizarea items()
, în toate versiunile python.
Python 3
De la Python 3 iteritems()
este nu mai este suportat. Utilizați items()
în loc.
for field, possible_values in fields.items():
print(field, possible_values)
Pentru Python 3.x iteritems
a fost eliminat. Utilizați items în loc.
for field, possible_values in fields.items():
print(field, possible_values)
Doriți să utilizați iteritems. Acesta returnează un iterator peste dicționar, care vă oferă un tuple(cheie, valoare)
>>> for field, values in fields.iteritems():
... print field, values
...
first_names ['foo', 'bar']
last_name ['gravy', 'snowman']
Problema ta era că făceai o buclă peste câmpuri, care returnează cheile din dicționar.
>>> for field in fields:
... print field
...
first_names
last_name
Pentru liste, utilizați enumerate
for field, possible_values in enumerate(fields):
print(field, possible_values)
iteritems
nu va funcționa pentru obiectele listă
- Acesta ar trebui să fie un răspuns corect (testat) cel puțin pentru python 2.7. – > .
- am făcut-o pentru metoda glob care listează fișierele din director. files=glob.glob(„*.pdf”) for index, filename in enumerate(files): # o anumită logică – > .
vă lipsește fields.iteritems()
în codul tău.
Ați putea, de asemenea, să o faceți în alt mod, în care să obțineți valorile folosind cheile din dicționar.
for key in fields:
value = fields[key]
Nu poate fi iterat direct în dicționar. Așa că puteți prin convertirea în tuple.
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)
- Vă rugăm să vă explicați răspunsul. – > .
- Nu poate fi iterat direct în dicționar. Deci, puteți să o faceți prin conversia în tuple. – > .
În Python3 iteritems()
nu mai este suportat
Utilizați .items
for field, possible_values in fields.items():
print(field, possible_values)
- Din câte îmi dau seama,
enumerate()
stochează de fapt indexul în poziția în carefield
este. – > .
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)
- Bine ați venit la Stack Overflow! În general, răspunsurile sunt mult mai utile dacă includ o explicație a ceea ce se intenționează să facă codul și de ce acesta rezolvă problema fără a introduce altele. – > .
102- În ceea ce privește motivul pentru care trebuie să faceți acest lucru, iterarea peste un dicționar itera prin chei, nu prin perechile cheie/valoare. – > Por Jeff Mercado.
- @jeffm asta m-a derutat. am văzut asta ca pe un foreach PHP. – > Por tipu.