2016-08-01 6 views
2

私はpython dictを持っていますが、その値の一部(ただしすべてではありません)はdictsです。例えばPythonでのネストされた索引付け

d = {'a' : 1, 
     'b' : {'c' : 3, 'd' : 'target_value'} 
     } 

任意の目標値に到達するためにキーを渡すための最良の方法だろうか? retrieve(d, (key, nested_key, ...))のようなものです。retrieve(d, ('b','d'))target valueを返します。

+0

はどこから狂ったデータ構造を得ていますか? –

+0

私はファイルを解析し、時には入れ子になっている辞書に整理しています。ただし、これはネストされた索引付け可能なデータ構造に適用されます。 – jpm

+0

私の間違いは、 'retrieve(d、( 'b'、 'd'))'は 'target_value'を返します。 – jpm

答えて

2

ここでは、データ構造を正規化する方法を見つけることをお勧めしますが、何らかの理由でできない場合は、順番に各キーにアクセスできます。例えば

def nested_getter(dictionary, *keys): 
    val = dictionary[keys[0]] 
    for key in keys[1:]: 
     val = val[key] 
    return val 
d = {'a' : 1, 
    'b' : {'c' : 3, 'd' : 'target_value'} 
    } 
print(nested_getter(d, 'b', 'd')) 

また、それは再帰的に行うことができます:

def nested_getter(dictionary, *keys): 
    val = dictionary[keys[0]] 
    if isinstance(val, dict): 
     return nested_getter(val, *keys[1:]) 
    else: 
     return val 
関連する問題