📜  Python – 值列表键展平(1)

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

Python - 值列表键展平

当你处理具有复杂嵌套结构的字典时,有时你可能需要将值列表键展平为单独的键和值。在Python中,我们可以使用一些方法来实现这个目标。

方法1:使用循环和递归

通过编写一个递归函数,我们可以迭代遍历字典,将值列表键展平为单独的键和值。

def flatten_dict(d, parent_key='', sep='.'):
    items = []
    for k, v in d.items():
        new_key = f"{parent_key}{sep}{k}" if parent_key else k
        if isinstance(v, dict):
            items.extend(flatten_dict(v, new_key, sep=sep).items())
        else:
            items.append((new_key, v))
    return dict(items)

使用这个函数,我们可以将字典展平为一个只包含单层键值对的字典。

my_dict = {
    'a': 1,
    'b': 2,
    'c': {
        'd': 3,
        'e': {
            'f': 4,
            'g': 5
        }
    }
}

flattened_dict = flatten_dict(my_dict)
print(flattened_dict)

上面的代码将输出:

{
    'a': 1,
    'b': 2,
    'c.d': 3,
    'c.e.f': 4,
    'c.e.g': 5
}
方法2:使用json_normalize

pandas库的json_normalize函数可以将嵌套的字典展平为DataFrame,从而简化了展平过程。

import pandas as pd

my_dict = {
    'a': 1,
    'b': 2,
    'c': {
        'd': 3,
        'e': {
            'f': 4,
            'g': 5
        }
    }
}

df = pd.json_normalize(my_dict, sep='.')
print(df)

上面的代码将输出:

   a  b  c.d  c.e.f  c.e.g
0  1  2    3      4      5

通过指定分隔符sep参数,我们可以控制用于连接键的字符。

结论

通过使用循环和递归或json_normalize函数,我们可以将嵌套的字典展平为单层的键值对形式。这样做可以简化数据处理过程,并使其更容易使用和分析数据。上述方法提供了两种不同的实现方式,可以根据具体情况选择使用。