📅  最后修改于: 2023-12-03 15:04:11.757000             🧑  作者: Mango
当你处理具有复杂嵌套结构的字典时,有时你可能需要将值列表键展平为单独的键和值。在Python中,我们可以使用一些方法来实现这个目标。
通过编写一个递归函数,我们可以迭代遍历字典,将值列表键展平为单独的键和值。
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
}
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
函数,我们可以将嵌套的字典展平为单层的键值对形式。这样做可以简化数据处理过程,并使其更容易使用和分析数据。上述方法提供了两种不同的实现方式,可以根据具体情况选择使用。