“太多的价值无法解包”,遍历一个字典。键=>字符串,值=>列表


323

我得到了'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              

Answers:


478

Python 2

您需要使用iteritems

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

请参阅此答案,以获取有关遍历字典的更多信息,例如items()在python版本之间使用using 。

Python 3

由于Python 3的 iteritems()不再支持。使用items()代替。

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

88
至于为什么需要这样做,遍历字典将遍历键,而不是键/值对。
Jeff Mercado

1
@jeffm令我困惑。我将其视为PHP foreach。
tipu

79

对于Python 3.x iteritems,已删除。改用物品

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

37

您要使用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

9

对于列表,使用 enumerate

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

iteritems 不适用于列表对象


至少应该是python 2.7的正确答案(经过测试)。

1

在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)

0

不能直接在字典中进行迭代。这样就可以通过转换为元组了

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)

请解释您的答案。
Maciej Jureczko

不能直接在字典中进行迭代。因此您可以通过转换为元组。
satya narayan pardhi 17-10-19

0

fields.iteritems()在代码中丢失了。

您也可以采用其他方式,即使用字典中的键获取值。

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
欢迎使用Stack Overflow!通常,如果答案包括对代码意图的解释,以及为什么不引入其他代码就能解决问题的原因,则答案会更有帮助。
蒂姆·迪克曼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.