I am getting the too many values to unpack error. Any idea how I can fix this?
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
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Python 3
Use items().
for field, possible_values in fields.items():
print(field, possible_values)
Python 2
Use iteritems().
for field, possible_values in fields.iteritems():
print field, possible_values
See this answer for more information on iterating through dictionaries, such as using items(), across Python versions.
For reference, iteritems() was removed in Python 3.
Method 2
For Python 3.x iteritems has been removed. Use items instead.
for field, possible_values in fields.items():
print(field, possible_values)
Method 3
You want to use iteritems. This returns an iterator over the dictionary, which gives you a tuple(key, value)
>>> for field, values in fields.iteritems(): ... print field, values ... first_names ['foo', 'bar'] last_name ['gravy', 'snowman']
Your problem was that you were looping over fields, which returns the keys of the dictionary.
>>> for field in fields: ... print field ... first_names last_name
Method 4
For lists, use enumerate
for field, possible_values in enumerate(fields):
print(field, possible_values)
iteritems will not work for list objects
Method 5
you are missing fields.iteritems() in your code.
You could also do it other way, where you get values using keys in the dictionary.
for key in fields:
value = fields[key]
Method 6
Can’t be iterating directly in dictionary. So you can through converting into 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)
Method 7
In Python3 iteritems() is no longer supported
Use .items
for field, possible_values in fields.items():
print(field, possible_values)
Method 8
Just thought I’d throw this in. I have the “too many values to unpack (expected 2)” crop up today. Infuriating but is was due to missing a comma in a choice list.
CapTextureChoices = [
("initial", ""),
("Shaggy", "Shaggy"),
("Wrinkled", "Wrinkled"),
("Striate," "Striate"),
("Downy", "Downy")
]
the missing comma between “Striate,” “Striate” was the culprit
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0