“解压缩的价值太多了”,迭代了一个字典。 key => string,value => list

时间:2011-03-29 00:32:14

标签: python

我收到'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              

9 个答案:

答案 0 :(得分:383)

您需要使用类似iteritems的内容。

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

有关在python版本中迭代字典(例如使用items())的更多信息,请参阅this answer

修改
由于 Python 3 iteritems()是no longer supported。改为使用items()。

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

答案 1 :(得分:65)

对于Python 3.x iteritems已被删除。请改用items

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

答案 2 :(得分:35)

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

答案 3 :(得分:7)

对于列表,请使用enumerate

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

iteritems不适用于列表对象

答案 4 :(得分: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)

答案 5 :(得分:0)

您的代码中缺少fields.iteritems()

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

for key in fields:
    value = fields[key]

答案 6 :(得分: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)

答案 7 :(得分:0)

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

答案 8 :(得分:0)

只是想我会把它扔进去。我今天突然出现“太多的值无法解压(预期为 2)”。真气不过是因为在选择列表中缺少一个逗号。

CapTextureChoices = [
("initial", ""),
("Shaggy", "Shaggy"),
("Wrinkled", "Wrinkled"),
("Striate," "Striate"),
("Downy", "Downy")
]

“条纹”之间缺少逗号,“条纹”是罪魁祸首