2016-08-01 88 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