字典的多层嵌套怎么用递归取键
时间: 2023-07-08 09:54:23 浏览: 101
同样地,我们可以使用递归来取得多层嵌套字典的键。以下是一个示例代码:
```python
def get_keys(data, target_value, current_keys=None):
if current_keys is None:
current_keys = []
for key, value in data.items():
if isinstance(value, dict):
keys = get_keys(value, target_value, current_keys + [key])
if keys:
return keys
elif value == target_value:
return current_keys + [key]
return None
# 示例字典
data = {
"a": {
"b": {
"c": 1,
"d": 2
}
},
"e": {
"f": 3,
"g": {
"h": 4,
"i": 1
}
}
}
# 获取键
keys = get_keys(data, 1)
print(keys) # 输出: ['a', 'b', 'c'],因为 data['a']['b']['c'] 的值为 1
```
在这个示例中,`get_keys` 函数接收三个参数:`data` 表示要取键的字典,`target_value` 表示要查找的值,`current_keys` 表示当前已经找到的键的列表。如果 `current_keys` 为 `None`,则表示当前还没有找到任何键,将其设为一个空列表。函数通过循环遍历字典的各个键值对,如果值是字典,则递归调用 `get_keys` 函数,传入该字典、目标值和当前键列表的拷贝。如果返回的键列表不为空,则说明已经找到目标值,直接返回当前键列表和找到的键列表。如果值不是字典,且等于目标值,则说明已经找到目标值,直接返回当前键列表和该键。如果循环结束仍未找到目标值,则返回 `None`。
阅读全文