「アンパックするには値が多すぎます」、dictを繰り返します。key => string、value => list


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              

回答:


478

Python 2

のようなものを使用する必要がありますiteritems

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

Pythonのバージョン間でのの使用など、辞書を反復する方法の詳細については、この回答を参照してくださいitems()

Python 3

以来Pythonの3 iteritems()されサポートされなくなりましitems()代わりに使用してください。

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

88
なぜこれを行う必要があるのか​​については、ディクショナリの反復は、キーと値のペアではなく、キーを反復処理します。
ジェフメルカド2011年

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

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へようこそ!一般に、コードに意図されていること、および他の人を紹介することなく問題を解決する理由の説明が含まれている場合、回答ははるかに役立ちます。
Tim Diekmann
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.