2016-04-24 12 views
-2

私はそうのようになります辞書を持っている:ネストされたdictキーのリストを印刷できませんか?

{'Tesco': [{'Parking': 'True', 'TrolleyHire': True, 
    'Location': {'Address': {'BuildingName': 'Church Street', 
      'BuildingNumber': '14', 'City' : 'London'}, 
    'Permit' = True}, 

は、基本的にはキーがリスト形式でネストされた辞書が含まれている辞書です。

上記の最初の「Tesco」キー内のすべてのネストされたキーを印刷したいと思います。

は、私が試してみました:

for key in dict: 
for key2 in dict[key]: 
    print (key2.keys()) 

をしかし、私ははAttributeErrorを得続ける: 'str' はオブジェクトが属性 '鍵' を持っていません。

上記のキーには、テスコキーと別のキーが含まれています。

上記のkey2には、Tescoキーに関連付けられたdicts(キーと値のペア)のリストが含まれています。

key2.keys()は、そのディクテーションに関連付けられたキーのリストを提供する必要がありますが、動作していないようです。

私にはこれを行う機能はありません。

明らかに簡単な解決策ですが、わかりません。 私は文字通りそれに5時間を費やしているし、それを行うために非常に簡単でなければなりませんようにそれはそうと、私は今、正式にあきらめ:(

+5

投稿した内容は有効なpython dictではありません。実際に動作する例を作ってください。 – timgeb

答えて

2

それは私の作品:

dict = { 
'Tesco': [{'Parking': 'True', 'TrolleyHire': True, 
'Location': {'Address': {'BuildingName': 'Church Street', 
'BuildingNumber': '14', 'City' : 'London'}, 
'Permit': True}}] 
} 

for key in dict: 
    for key2 in dict[key]: 
     print (key2.keys()) 

この版画:

dict_keys(['Location', 'Parking', 'TrolleyHire']) 

はですあなたはそれを使っている間違いなくその辞書ですか?私はそれを完了するために最後にいくつかのものを追加しなければならなかった。

編集:元のコードを確認した後。

JSONは、SchemeとChargeDeviceという2つのキーを持つ辞書を作成しています。これらの各キーを反復処理します。

最初のパスでは、key"Scheme"に等しくなります。

次に、for key2 in data[key]と言って、 "Scheme"に関連付けられた辞書を取り出し、そのキーを反復します。

問題は、key2は常にキーストリングを表し、ストリングはキーを持たず、dictsだけであることです。たとえば、key2は "SchemeCode"(文字列)という値をとり、key2.keys()を呼び出しています。文字列にはkeys()メソッドがないため、エラーになります。おそらくprint(key2)がほしいと思うだけです。

編集2

私は、私は完全に何が必要理解していないが、以下は、メイン辞書の第二のレベルで、重複せずに、キーのリストを出力します。

key_names = [] 
for key in data: 
    for key2 in data[key]: 
     if type(key2) == str and key2 not in key_names: 
      key_names.append(key2) 
     elif type(key2) == dict: 
      for key3 in key2.keys(): 
       if key3 not in key_names: 
        key_names.append(key3) 
print(key_names) 

任意に深く移動したい場合は、自分自身を再帰的に呼び出す関数を使用する必要があります。

+0

うーん、私は取得し続ける: AttributeError: 'str'オブジェクトには属性 'keys'がありません print(key2.keys()) – teep

+0

奇妙なことは、これが昨日意図したとおりに正確に機能していることです。同じdict、何も変わっていない。 – teep

+1

質問に入れた辞書は、最後に中括弧がないため、使用している辞書にすることはできません。構文も間違っています。実際の辞書をコードから貼り付けると、より明確になることがあります。 –

1

それはちょうど.values()おそらくよりエレガント使用することです:

for sub_list in dict.values(): 
    for sub_dict in sub_list: 
     print(sub_dict.keys()) 
+0

まだ取得中: AttributeError: 'str'オブジェクトに最後の行に 'keys'属性がありません – teep

+1

使用した実際の辞書で質問を更新できますか?これは私のためにうまく動作します – tobspr

+0

Samが私のしたことについて私のコメントを参照してください。私はtobsprのコードを使用するときに同じエラーが発生します。 – Marichyasana

関連する問題