2011-03-29 74 views
191

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

回答

272

您需要使用类似iteritems之类的东西。

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

有关更多信息,请参见this answer通过字典迭代,如使用items(),不同的Python版本。

EDIT
由于Python 3个中 iteritems()是no longer supported。使用项目()代替。

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

至于为什么你需要这样做,迭代字典迭代通过键,而不是键/值对。 – 2011-03-29 00:35:53

+1

@jeffm这是让我困惑的。我认为这是一个PHP的foreach。 – tipu 2011-03-29 16:23:38

29

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

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

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

对于列表,用枚举

现场,在枚举POSSIBLE_VALUES(场): 打印(场,POSSIBLE_VALUES)

iteritems不会为列表工作对象

0

灿” t直接在字典中迭代。所以你可以通过转换成元组

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) 
+0

请解释你的答案。 – 2017-10-18 07:52:31

+0

不能直接在字典中迭代。所以你可以通过转换成元组。 – 2017-10-19 05:01:13

0

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

你也可以用其他方式做到这一点,你可以通过字典中的键来获得值。

for key in fields: 
    value = fields[key] 
相关问题