如何通过反转键列表生成指定结构的嵌套字典?
解决思路:从内到外构建嵌套字典
你的需求其实很好实现,核心逻辑就是从最内层的键值对开始,一步步向外层包裹——因为目标的嵌套结构刚好是列表里的键从最后一个到第一个依次作为外层键,所以我们只需要反过来构建就行。
方法一:迭代反转构建(最直观)
这是最容易理解的方式,先从最终的叶子值入手,然后用倒序遍历的键依次把当前结果包裹成新字典:
lis = ['model', 'properties', 'config', 'properties', 'zookeeperStorageSize', 'default'] target_value = '50m' # 初始值设为最内层的value result = target_value # 倒序遍历除了最后一个键的所有元素(最后一个键要和value先绑定) for key in reversed(lis[:-1]): result = {key: result} print(result)
运行这段代码,你就能得到想要的结果:
{'model': {'properties': {'config': {'properties': {'zookeeperStorageSize': {'default': '50m'}}}}}}
为什么这么做?
- 第一步,
result是'50m',然后遍历到第一个倒序键zookeeperStorageSize,把result包装成{'zookeeperStorageSize': '50m'}; - 接着遍历
properties,再把上面的字典包装成{'properties': {'zookeeperStorageSize': '50m'}}; - 以此类推,直到遍历完第一个键
model,就得到了完整的嵌套结构。
方法二:递归实现(适合复杂场景)
如果你的键列表可能动态变化,或者需要更灵活的处理,递归也是个不错的选择:
def build_nested_dict(keys, value): # 递归终止条件:没有键了,返回最终值 if not keys: return value # 用第一个键作为外层,递归处理剩下的键 return {keys[0]: build_nested_dict(keys[1:], value)} lis = ['model', 'properties', 'config', 'properties', 'zookeeperStorageSize', 'default'] target_value = '50m' result = build_nested_dict(lis, target_value) print(result)
这个函数会从第一个键开始,层层向内构建嵌套结构,最终输出和上面完全一致的结果。
为什么你之前反转遍历没成功?
大概率是没处理好遍历的范围和初始值——比如如果直接反转整个列表(包括最后一个键default),会导致多套一层,或者初始值没有设为最终的叶子值'50m',而是直接从字典开始构建,自然得不到正确的嵌套结构。
内容的提问来源于stack exchange,提问作者MelDev
相关产品推荐
相关产品推荐

