2017-05-03 12 views
4

私はネストされたpython dictionaryデータ構造を持っています。 collectionモジュールを使用して、そのキーと値withoutを読みたいと思います。データ構造は以下のようになります。ネストされたdictをどのように反復するのですか?

d = {'dict1': {'foo': 1, 'bar': 2}, 'dict2': {'baz': 3, 'quux': 4}} 

私は辞書に記載されているキーを朗読していますが、エラーが表示されていました。

コード

for key, value in d: 
    print(Key) 

エラー

ValueError: too many values to unpack (expected 2) 

だから誰もがエラーとどのように辞書を反復処理するの背後にある理由を説明してくださいすることができます。

+2

入れ子になっているキーと値も見たいですか? – ZdaR

+1

'd.items()'と書くだけで、デフォルトではdictの名前を反復するとキーだけが返されます。それが助けて欲しい。 :) –

+0

はい。入れ子にされたキーと値を含むすべてのキーと値を読みたい – Arijit

答えて

5

、コードがiteritemsの場所(でこの

d = {'dict1': {'foo': 1, 'bar': 2}, 'dict2': {'baz': 3, 'quux': 4}} 

    for k1,v1 in d.iteritems(): # the basic way 
     temp = "" 
     temp+=k1 
     for k2,v2 in v1.iteritems(): 
      temp = temp+" "+str(k2)+" "+str(v2) 
     print temp 

ように書きます)あなたにも)(アイテムを使用することができますが、iteritems()はるかに効率的で、イテレータを返します。

希望します。

5

キーを入手するには、あなたがdict.items()を必要とする値:

for key, value in d.items(): 
    print(key) 

あなただけのキー場合:だけあなたの鍵を与える辞書を反復

for key in d: 
    print(key) 
+3

python2の場合は、 'dict。iteritems() 'を呼び出す代わりに、このユースケースではより高速です。 – jadsq

3

を。

あなたはタプルの束を期待して、タプルではないものを解凍しようとしました(コードはそれぞれの反復された項目が(key,value)という形式になるように設定されています。あなたは、単に)各反復でkeyを取得した。

あなたはまた、NameErrorにつながっていると思われる、keyと同じではありませんこれは、Keyを印刷しようとした。

for key in d: 
    print(key) 

が動作するはずです。

4
d = {'dict1': {'foo': 1, 'bar': 2}, 'dict2': {'baz': 3, 'quux': 4}} 

for i in d.keys(): 
    print i 

    for j in d[i].keys(): 
     print j 

出力:要求された出力として

dict1 

foo 
bar 

dict2 

baz 
quux 
関連する問題