2016-11-09 9 views
0

オブジェクトのより深いオブジェクトにアクセスする方法はありますか?より深いオブジェクトへのアクセス

私は欲望の結果を達成するために、ループを使用しています:

obj = { 'level_one': { 'level_two': {} } } 
for k,v in obj.items(): 
    for k,v in v.items(): 
     print v 

は私にこれを行うための積極的な方法です。他の方法はありますか?キーはdinamicallyですので使用できませんobj['level_one']['level_two']

ありがとうございます。

+1

は 'キーは意味dinamically'ですか? – MMF

+0

可能な '' 'KeyError'''をそれに応じて処理することができます。 –

+0

すべての値が必要な場合は、すでに持っているコードの 'loop'が必要です。単一の値を得るために、 'for'ループでキーを識別するために使用しているロジックは、同じものを使用します。どうした? –

答えて

0

これは、ディクテーションが任意の量のネストを持つことができる場合には、再帰的な解決策に似ているように見えます。

def deep_dict_loop(obj): 
    for k in obj: 
     if isinstance(obj[k], dict): 
      yield from deep_dict_loop(obj[k]) 
     else: 
      yield obj[k] 

for value in deep_dict_loop({ 'level_one': { 'level_two': {'foo': 'bar'} } }): 
    print value # prints 'bar' 
0

このコードでは、内部ディクテーションのすべての値を持つイテレータを提供します。

import itertools 
values = itertools.chain.from_ierable({v.values() for v in obj.values()}) 

あなたはvaluesに反復することができますか、あなたがそれをリストに変換する強制することができ便利ではありません。

list(values) 
関連する問題