如何将扁平化字典转换回嵌套字典?附嵌套转扁平实现代码
如何将扁平化字典还原为原始嵌套字典?
我已经用 Pandas 实现了嵌套字典转扁平化字典的逻辑:
make_flatten_dict = lambda d, sep: pd.json_normalize(d, sep=sep).to_dict(orient='records')[0]
输入原始嵌套字典:
original_dict = {'a': 1,'c': {'a': '#a_val', 'b': {'x': '#x_value', 'y' : '#y'}},'d': [1, '#d_i1', 3]}
转换后得到扁平化字典:
flat_dict = {'a': 1, 'd': [1, '#d_i1', 3], 'c.a': '#a_val', 'c.b.x': '#x_value', 'c.b.y': '#y'}
现在需要把这个扁平化字典还原回原始的嵌套结构。
实现方法
可以写一个自定义函数,按分隔符拆分扁平化字典的键,逐层构建嵌套字典:
def flatten_to_nested(flat_dict, sep): nested = {} for full_key, value in flat_dict.items(): keys = full_key.split(sep) current_level = nested # 遍历层级键,创建嵌套节点 for key in keys[:-1]: if key not in current_level: current_level[key] = {} current_level = current_level[key] # 赋值最后一层键的值 current_level[keys[-1]] = value return nested
测试验证
用给定的扁平化字典测试:
flat_dict = {'a': 1, 'd': [1, '#d_i1', 3], 'c.a': '#a_val', 'c.b.x': '#x_value', 'c.b.y': '#y'} restored_dict = flatten_to_nested(flat_dict, sep='.') print(restored_dict)
输出结果和原始字典完全一致:
{'a': 1, 'd': [1, '#d_i1', 3], 'c': {'a': '#a_val', 'b': {'x': '#x_value', 'y': '#y'}}}
关键点
- 函数会自动处理嵌套层级,遇到不存在的键则创建新的字典节点
- 列表、数值等非字典类型的值会被直接保留,不会被错误嵌套
内容的提问来源于stack exchange,提问作者alihejrati
相关产品推荐
相关产品推荐

