遍历嵌套字典列表并将键值对带到一级字典是一个常见的数据处理任务,尤其在处理JSON数据时。以下是一个详细的解答,包括基础概念、示例代码和相关应用场景。
假设我们有以下嵌套字典列表的JSON数据:
[
{
"id": 1,
"name": "Alice",
"details": {
"age": 30,
"city": "New York"
}
},
{
"id": 2,
"name": "Bob",
"details": {
"age": 25,
"city": "Los Angeles"
}
}
]
我们希望将其转换为以下一级字典:
[
{
"id": 1,
"name": "Alice",
"age": 30,
"city": "New York"
},
{
"id": 2,
"name": "Bob",
"age": 25,
"city": "Los Angeles"
}
]
以下是Python代码实现:
def flatten_nested_dict(data):
flattened_data = []
for item in data:
flattened_item = item.copy()
if 'details' in item:
flattened_item.update(item['details'])
del flattened_item['details']
flattened_data.append(flattened_item)
return flattened_data
# 示例数据
nested_data = [
{
"id": 1,
"name": "Alice",
"details": {
"age": 30,
"city": "New York"
}
},
{
"id": 2,
"name": "Bob",
"details": {
"age": 25,
"city": "Los Angeles"
}
}
]
# 转换为一级字典
flattened_data = flatten_nested_dict(nested_data)
print(flattened_data)
问题:嵌套层级较深,代码复杂度增加。 解决方法:可以使用递归函数来处理任意深度的嵌套结构。
def flatten_nested_dict_recursive(data):
flattened_data = []
for item in data:
flattened_item = item.copy()
for key, value in item.items():
if isinstance(value, dict):
flattened_item.update(flatten_nested_dict_recursive([value])[0])
del flattened_item[key]
flattened_data.append(flattened_item)
return flattened_data
# 示例数据
deep_nested_data = [
{
"id": 1,
"name": "Alice",
"details": {
"age": 30,
"city": "New York",
"contact": {
"email": "alice@example.com",
"phone": "123-456-7890"
}
}
}
]
# 转换为一级字典
flattened_deep_data = flatten_nested_dict_recursive(deep_nested_data)
print(flattened_deep_data)
通过这种方式,可以处理任意深度的嵌套字典列表,并将其转换为一级字典。
领取专属 10元无门槛券
手把手带您无忧上云