2011-03-29 45 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] 
相關問題