2016-08-01 92 views
2

我有一個python字典,有些(但不是全部)它的值也是字典。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