2016-10-02 3 views
0

最初にアクセスするキーがわからないときに、ネストされた辞書キーにアクセスする簡単な方法はありますか?例えばPython:ネストされた辞書キーに動的にアクセスしますか?

:私はlabelキーまたはconfigキーを介してアクセス可能な他の辞書内のvalueキーのいずれかにアクセスする必要があります。この辞書で

dct = {'label': 'A', 'config': {'value': 'val1'}} 

状態によって異なります。例えば

我々はlabelと呼ばれる変数、そうであれば持っている場合:簡単にこのケースで

label = True 
if label: 
    key = 'label' 

その種:

dct[key] 

をラベルが虚偽であると私は、ネストされた辞書にアクセスする必要がある場合どのように私は動的に指定することができますので、すべての反復項目でifsを使用する必要はありません。の代わりにlabelが使用されているかどうかを毎回チェックします。辞書)?

のような:

label = False 
if label: 
    key = 'label' 
else: 
    key = 'config..?' # it should be something like ['config']['value'] 
+0

あなたは自分の辞書クラスを記述し、 '' dictの[ 'config.value'] 'で動作するように__getitem__'メソッドを上書きすることができます - http://stackoverflow.com/questions/2390827/how-to-properly- subclass-dict-override-getitem-setitem – furas

+1

または 'key'を関数にするだけです。 'key = lambda d:d ['config'] ['value']'。 – kennytm

+0

@kennytm実際には簡単には機能しません。なぜなら、関数として扱うからです。問題を解決しない 'dct [key(dct)]'のようなメソッドを呼び出すことを期待しています。そのキーを別の方法で呼び出す – Andrius

答えて

1

あなたが横断するキーを知っている場合、あなたは次のことを試してみることができます。これは、ネストされたdictの任意のレベルで機能します。

dct = {'label': 'A', 'config': {'value': 'val1'}} 

label = True 
key = ('label',) 
if not label: 
    key = ('config', 'value') 

ret = dct 
for k in key: 
    ret = ret[k] 

print ret 
関連する問題