获取python中最深层嵌套dict的值

时间:2019-03-21 01:09:54

标签: python python-3.x

我有一本类似

的字典
{a:{b:{c:{d:2}}}, e:2, f:2}

我应该如何获取d的值并在python中进行更改?先前的问题仅显示了如何获取嵌套级别,但没有显示如何获取值。在这种情况下,我不知道该字典的嵌套级别。任何帮助将不胜感激,谢谢!!! 附言我正在使用python 3

2 个答案:

答案 0 :(得分:2)

如何进行递归?

def unest(data, key):
    if key in data.keys():
        return data.get(key)
    else:
        for dkey in data.keys():
            if isinstance(data.get(dkey), dict):
                return unest(data.get(dkey), key)
            else:
                continue

d = {'a':{'b':{'c':{'d':25}}}, 'e':2, 'f':2}

r = unest(d, 'd')
# 25

r = unest(d, 'c')
# {'d': 25}

编辑:正如Paul Rooney指出的那样,我们不必使用data.keys,我们可以通过执行if key in data

来简单地遍历键。

编辑2:根据您提供的输入,它会找到最深的层次,但是这并不涵盖某些情况,例如,键e也是嵌套字典,n + 1 n等于键a的深度的水平。

def find_deepest(data):
    if not any([isinstance(data.get(k), dict) for k in data]):
        return data
    else:
        for dkey in data:
            if isinstance(data.get(dkey), dict):
                return find_deepest(data.get(dkey))
            else:
                continue

u = find_deepest(d)
# {'d': 2}

答案 1 :(得分:0)

我正在寻找类似的解决方案,但我想在(可能)嵌套字典中找到任何键的最深实例并返回它的值。这假设您提前知道要搜索的键。我不清楚这是否是原始问题的有效假设,但我希望这会在其他人偶然发现此线程时有所帮助。

def find_deepest_item(obj, key, deepest_item = None):
if key in obj: 
    deepest_item = obj[key]
for k, v in obj.items():
    if isinstance(v,dict):
        item = find_deepest_item(v, key, deepest_item)
        if item is not None:
            deepest_item = item
return deepest_item

在此示例中,“d”键也存在于顶层:

d = {'a':{'b':{'c':{'d':25}}}, 'd':3, 'e':2, 'f':2}
v = find_deepest_item(d, 'd')
# 25

搜索“c”:

v = find_deepest_item(d, 'c')
# {'d': 25}