📜  Python – 将平面字典转换为嵌套字典(1)

📅  最后修改于: 2023-12-03 15:04:12.439000             🧑  作者: Mango

Python – 将平面字典转换为嵌套字典

在 Python 编程中,当我们需要进行多层字典嵌套时,可以将原先的平面字典转换为嵌套字典。这个过程比较简单,只需要一定的方法和技巧即可。

场景举例

假设我们有如下的平面字典:

{
    'name.first': 'John',
    'name.last': 'Doe',
    'address.city': 'New York',
    'address.state': 'NY',
    'address.zip': '10001'
}

我们希望将其转换为如下的嵌套字典:

{
    'name': {
        'first': 'John',
        'last': 'Doe'
    },
    'address': {
        'city': 'New York',
        'state': 'NY',
        'zip': '10001'
    }
}
实现方法

我们可以通过如下的方法来实现这个目标:

def flat_to_nested_dict(flat_dict):
    nested_dict = {}
    for key, value in flat_dict.items():
        parts = key.split('.')
        current = nested_dict
        for part in parts[:-1]:
            if part not in current:
                current[part] = {}
            current = current[part]
        current[parts[-1]] = value
    return nested_dict

首先,我们初始化了一个空的嵌套字典 nested_dict。然后,我们遍历输入的平面字典中的每一个键值对,并使用 split 函数将键按照 . 进行分割。我们使用一个变量 current 来表示当前正在构造的嵌套字典。我们从第一个部分开始遍历 parts[:-1],并根据每一个部分构建一个新的嵌套字典。当我们遍历完所有部分后,我们在当前的嵌套字典中设置最后一个部分的值 parts[-1] 为给定的值 value。最后,我们返回构建后的嵌套字典。

这个方法的时间复杂度是 $O(nm)$,其中 $n$ 是嵌套的深度,$m$ 是字典的大小,空间复杂度也是 $O(nm)$。

使用示例

假设我们有如下的平面字典:

flat_dict = {
    'name.first': 'John',
    'name.last': 'Doe',
    'address.city': 'New York',
    'address.state': 'NY',
    'address.zip': '10001'
}

我们可以通过如下的方式将其转换为嵌套字典:

nested_dict = flat_to_nested_dict(flat_dict)

最终的嵌套字典为:

{
    'name': {
        'first': 'John',
        'last': 'Doe'
    },
    'address': {
        'city': 'New York',
        'state': 'NY',
        'zip': '10001'
    }
}
总结

本文介绍了一种方法,用于将平面字典转换为嵌套字典。这个方法比较简单,只需要用到一个循环和一些基本的字典操作。这个方法的时间复杂度为 $O(nm)$,其中 $n$ 是嵌套的深度,$m$ 是字典的大小,空间复杂度也是 $O(nm)$。