遍历字典返回值,即使找到也无

时间:2020-05-30 06:57:11

标签: python dictionary

我正在尝试从data中获取值,但是下面的函数总是给我无。我在循环中包含了print,以便实际上可以看到该条件是正确的,而不知道为什么它返回None。但是打印出的值是正确的。

data = { 
    'test1': { 
        'test1.1': { 
            'a': 'a', 
            'b': 'b' 
        } 
    }, 
    'test2': { 
        'test2.1': { 
            'test2.2': { 
                'c': 'c', 
                'd': 'd' 
            } 
        }, 
        'test_list': [1,2,3] 
    } 
}

def get_dict(key, dict_data): 
    for k, v in dict_data.items(): 
        if k == key and isinstance(v, dict): 
            print(v) 
            return v 
        else: 
            if isinstance(v, dict): 
                return get_dict(key, v) # <-- added return, same result

get_dict('test1', data)返回OK

get_dict('test1.1', data)返回None,但应该有{'a': 'a', 'b': 'b'}

get_dict('test2', data)返回OK

get_dict('test2.1', data)返回None,但应返回{'test2.2': {'c': 'c', 'd': 'd'}}

2 个答案:

答案 0 :(得分:3)

问题在于您永远都不会到达第二个键,因为两条路径都将在您的代码中返回,并且您在循环中永远不会获得多次迭代。您无需遍历字典项。只需尝试访问密钥即可。如果不存在,则循环遍历值并递归,返回找到的第一件事:

data = { 
    'test1': { 
        'test1.1': { 
            'a': 'a', 
            'b': 'b' 
        } 
    }, 
    'test2': { 
        'test2.1': { 
            'test2.2': { 
                'c': 'c', 
                'd': 'd' 
            } 
        }, 
        'test_list': [1,2,3] 
    } 
}

def get_dict(key, dict_data):
    if not isinstance(dict_data, dict):
        return
    try:
        return dict_data[key]   
    except KeyError:
        for v in dict_data.values():
            found = get_dict(key, v)
            if found:
                return found


get_dict('test2.2', data)
# {'c': 'c', 'd': 'd'}

get_dict('test2.1', data)
# {'test2.2': {'c': 'c', 'd': 'd'}}

答案 1 :(得分:0)

您还应该继续研究其他命令。

下面的代码没有层次结构:

def get_dict(key, dict_data): 
    for k, v in dict_data.items(): 
        if k == key and isinstance(v, dict): 
            return v 
        elif isinstance(v, dict): 
            ret = get_dict(key, v)
            if ret is not None:
                return ret
    return None