Python中如何将多层嵌套字典转换为键路径值拼接格式的列表
实现嵌套字典的键路径拼接转换
实现思路为通过递归/迭代遍历嵌套字典,每进入一层字典就将当前层的键追加到路径缓存中,直到遍历到非字典类型的值时,将完整路径与值用冒号拼接后存入结果列表即可。
递归实现代码(写法简单直观,适合嵌套层级不深的场景)
def dict_to_path_list(dct): result = [] def traverse(current_dict, path_cache): for key, value in current_dict.items(): new_path = path_cache + [key] if isinstance(value, dict): # 值仍为字典,继续向下遍历 traverse(value, new_path) else: # 遍历到末端值,拼接后存入结果 result.append(":".join(map(str, new_path + [value]))) traverse(dct, []) return result # 测试效果 dct = {"a":1,"b":{"c":2,"d":{"z":5,"t":12}}} lst = dict_to_path_list(dct) print(lst) # 输出:['a:1', 'b:c:2', 'b:d:z:5', 'b:d:t:12']
迭代实现代码(用栈实现,避免超深嵌套字典导致递归栈溢出)
def dict_to_path_list_iter(dct): result = [] stack = [(dct, [])] while stack: current_dict, path_cache = stack.pop() # 反转key顺序保证输出顺序和递归实现一致,因为栈是后进先出结构 for key in reversed(list(current_dict.keys())): value = current_dict[key] new_path = path_cache + [key] if isinstance(value, dict): stack.append((value, new_path)) else: result.append(":".join(map(str, new_path + [value]))) return result
注意事项
- 代码中使用
map(str, ...)处理键和值,兼容非字符串类型的键/值拼接 - 如果需要处理列表等其他嵌套结构,可自行补充对应类型判断扩展逻辑
内容的提问来源于stack exchange,提问作者Ayufi
相关产品推荐
相关产品推荐

