"слишком много значений для распаковки", итерации по dict. key => string, value => list
Я получаю ошибку 'too many values to unpack'
. Любая идея, как я могу это исправить?
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
Ответы
Ответ 1
Вам нужно использовать что-то вроде iteritems.
for field, possible_values in fields.iteritems():
print field, possible_values
Посмотрите этот ответ для получения дополнительной информации об итерациях по словарям, таким как использование items()
разных версиях Python.
РЕДАКТИРОВАТЬ
Начиная с Python 3 iteritems() больше не поддерживается. Вместо этого используйте items().
for field, possible_values in fields.items():
print(field, possible_values)
Ответ 2
Для Python 3.x iteritems
был удален. Вместо этого используйте items.
for field, possible_values in fields.items():
print(field, possible_values)
Ответ 3
Вы хотите использовать iteritems. Это возвращает итератор по словарю, который дает вам кортеж (ключ, значение)
>>> for field, values in fields.iteritems():
... print field, values
...
first_names ['foo', 'bar']
last_name ['gravy', 'snowman']
Ваша проблема заключалась в том, что вы перебираете поля, которые возвращают ключи словаря.
>>> for field in fields:
... print field
...
first_names
last_name
Ответ 4
Для списков используйте enumerate
for field, possible_values in enumerate(fields):
print(field, possible_values)
iteritems
не будет работать для объектов списка
Ответ 5
Невозможно выполнить итерацию непосредственно в словаре. Таким образом, вы можете через преобразовать в кортеж.
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)
Ответ 6
вам не хватает fields.iteritems()
в вашем коде.
Вы также можете сделать это другим способом, где вы получаете значения, используя ключи в словаре.
for key in fields:
value = fields[key]
Ответ 7
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)
Ответ 8
В Python3 iteritems()
больше не поддерживается
РЕШЕНИЕ1:
Используйте .items
for field, possible_values in fields.items():
print(field, possible_values)
РЕШЕНИЕ2:
Вы также можете использовать enumerate()
for field, possible_values in enumerate(fields):
print(field, possible_values)