2016-09-01 8 views
0

私は人のリストをループして各人について知っているすべてを印刷し、各人物のために辞書を使用するよう求めている練習問題があります。私はPythonを受け取り、私の辞書をループすることから始めようとしていますが、私のコードを実行しようとするたびに、「値のエラー:アンパックする値が多すぎます(予想2)」というエラーメッセージが表示されます。Pythonの人々のリストをループすることについて混乱しています

dictionaries_v = { 

    'first_name': 'victor', 
    'last_name': 'croc', 
    'age': 21, 
    'city': 'new york', 
    } 

dictionaries_c = { 

    'first_name': 'charmy', 
    'last_name': 'bee', 
    'age': 8, 
    'city': 'new york', 
    } 

dictionaries_e = { 

    'first_name': 'espio', 
    'last_name': 'armadilo', 
    'age': 15, 
    'city': 'new york', 
    } 

people = ['dictionaries_v', 'dictionaries_c', 'dictionaries_e'] 

for key, value in people: 

    print("\n" + key + ": " + value) 

ありがとうございます。

答えて

0

peopleです。リストからは、一度に1つの値しか取得できません。ただし、の要素は辞書です。だから、次のループでは動作します:

for element in people: 
    for key, value in element: 
     print("\n" + key + ": " + value) 

外側のループはpeopleに各辞書を通過し、その辞書にelementを設定します。内部ループはその辞書を通り、keyをキーに設定し、valueを値に設定します。

また、people['dictionaries_v', 'dictionaries_c', 'dictionaries_e']に設定します。各要素を文字列に設定する代わりに、変数自体に設定してください:[dictionaries_v, dictionaries_c, dictionaries_e]

+1

このようなネストループを持つ必要はありません。あなたのリストの各反復は、リスト内の各辞書になります。 'element' =>' element.get( 'last_name') ' – idjaw

+0

OPは人に関する情報を_all_で表示するように要求するので、ネストされたforループはすべてのキー/値を取得しますペア。 –

+0

正確に。あなたは最初のループから得ることができます。各繰り返し、 'element'は各辞書を保持します。厳密に提供されたデータに基づいて、あなたはする必要はありません。 – idjaw

0

リストに文字列を追加しています。変数名を使用してください。

people = [dictionaries_v, dictionaries_c, dictionaries_e] 

編集: 以下開梱の問題を修正するより多くのコードを追加します。

for person in people: 
    for key,value in person: 
     print key, " : ", value 
+0

これでも、アンパックする値が多すぎるという問題は修正されません。 –

3

あなたの最初の問題は、あなたのリストは、3つの文字列を保持していることです。どのように引用符で囲まれているかに注目してください。だからあなたがあなたのリストを反復するとき、あなたはあなたが期待する辞書を得ることは間違いないでしょう。

第2に、peoplelistです。したがって、あなたのリストを反復するとき、反復子は各反復を通して辞書を保持します。もし、あなたの辞書から特定の情報を取得するには

{'last_name': 'croc', 'age': 21, 'first_name': 'victor', 'city': 'new york'} 
{'last_name': 'bee', 'age': 8, 'first_name': 'charmy', 'city': 'new york'} 
{'last_name': 'armadilo', 'age': 15, 'first_name': 'espio', 'city': 'new york'} 

people = [dictionaries_v, dictionaries_c, dictionaries_e] 
for d in people: 
    print(d) 

あなたの出力は次のようになります。これを知っ

は、あなたは、単に他のリストのように、あなたのリストを反復処理する必要があります各反復でキーを使用するだけです。簡単な例:

for d in people: 
    print(d['last_name']) 
+0

出力のキーと値のペアの順序は、プログラムを実行するたびに変わることに注意してください。辞書が必ずしも注文を保持するとは限りません。 –

+1

@ NeaA。はい、私はそれを十分に認識しています。私は注文を保持することについて何も言及しておらず、注文を保持する必要はありません。あなたはリストのように辞書のデータにアクセスしません。 'd ['last_name']'を実行すると、それは 'last_name'が辞書の最初のエントリであることを意味しません。それは辞書の仕組みではありません。 – idjaw

+0

フィードバックいただきありがとうございます。私のリストの一重引用符が主な問題であることが判明しました。 – PhantomDiclonius

関連する問題