📅  最后修改于: 2023-12-03 15:18:51.926000             🧑  作者: Mango
Python中的字典通常是嵌套的,即一个字典的值可以是另一个字典。如果我们需要在多级嵌套的字典中获取特定深度的项目,该怎么做呢?本文将介绍如何使用递归函数来获取特定嵌套级别的项目。
在本文中,我们将使用以下示例字典:
my_dict = {
"a": {
"b": {
"c": ["d", "e", "f"]
},
"g": {
"h": "i"
}
},
"j": {
"k": "l"
}
}
这个字典有两个顶级键:a
和j
。a
下面有两个子键:b
和g
。b
下面包含一个键c
和一个值为列表的值。g
下面有一个键h
和一个值i
。j
下面只有一个键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,所以我们没有向下搜索。第二个测试用例返回包含键b
、g
和k
的字典,因为它们是深度为1的子键。第三个测试用例返回包含键c
和h
的字典,因为它们是深度为2的子键。第四个测试用例返回None,因为深度为3的子键不存在。
此外,我们还可以根据需要修改get_item_at_depth()
函数,以便获取字典中特定深度的所有项目或值。该函数也适用于具有任意深度的嵌套字典。