📜  Python - 从字典中获取特定嵌套级别的项目(1)

📅  最后修改于: 2023-12-03 15:18:51.926000             🧑  作者: Mango

Python - 从字典中获取特定嵌套级别的项目

Python中的字典通常是嵌套的,即一个字典的值可以是另一个字典。如果我们需要在多级嵌套的字典中获取特定深度的项目,该怎么做呢?本文将介绍如何使用递归函数来获取特定嵌套级别的项目。

示例字典

在本文中,我们将使用以下示例字典:

my_dict = {
    "a": {
        "b": {
            "c": ["d", "e", "f"]
        },
        "g": {
            "h": "i"
        }
    },
    "j": {
        "k": "l"
    }
}

这个字典有两个顶级键:aja下面有两个子键:bgb下面包含一个键c和一个值为列表的值。g下面有一个键h和一个值ij下面只有一个键k和一个值l

获取特定深度的项目

要获取示例字典中特定深度的项目,我们可以使用递归函数。下面是一个名为get_item_at_depth()的函数,该函数接受两个参数:要搜索的字典和要查找的深度。该函数将返回与该深度匹配的键值对。如果没有匹配的深度,函数将返回None。

def get_item_at_depth(d, depth):
    if depth == 0:
        return d
    for k, v in d.items():
        if isinstance(v, dict):
            result = get_item_at_depth(v, depth - 1)
            if result is not None:
                return result
    return None

让我们看一下这个函数的工作原理。首先,如果深度等于0,则返回当前字典。否则,我们遍历字典中的键值对。如果值是一个字典,则递归调用get_item_at_depth()函数,并将深度减少1。如果该函数返回非None的结果,则返回该结果。如果没有匹配的深度,函数将返回None。

示例用法

现在让我们来看看如何使用get_item_at_depth()函数来获取示例字典中的特定深度的项目。

print(get_item_at_depth(my_dict, 0))  # {'a': {...}, 'j': {...}}
print(get_item_at_depth(my_dict, 1))  # {'b': {...}, 'g': {...}, 'k': 'l'}
print(get_item_at_depth(my_dict, 2))  # {'c': ['d', 'e', 'f'], 'h': 'i'}
print(get_item_at_depth(my_dict, 3))  # None

第一个测试用例返回整个字典,因为深度为0,所以我们没有向下搜索。第二个测试用例返回包含键bgk的字典,因为它们是深度为1的子键。第三个测试用例返回包含键ch的字典,因为它们是深度为2的子键。第四个测试用例返回None,因为深度为3的子键不存在。

结论

此外,我们还可以根据需要修改get_item_at_depth()函数,以便获取字典中特定深度的所有项目或值。该函数也适用于具有任意深度的嵌套字典。