本文介绍一种通用、可扩展的递归方法,将具有深层嵌套结构(如按地域层级展开)的字典列表扁平化为单一层级的字典列表,保留关键字段(person、city、address、facebooklink),并自动提取每层的业务数据。
在处理地理层级、组织架构或树状分类等嵌套 JSON 数据时,常遇到类似如下结构:顶层是国家,其下以键名(如 "united states")存储子列表,每个子项又包含同构字段及下一级嵌套键(如 "ohio" → "clevland" → "Street A")。目标不是简单展开数组,而是逐层提取有效业务对象,忽略作为容器的动态键名,仅保留含 person、city、address、facebooklink 等语义字段的字典。
以下是一个健壮、可读性强的递归实现:
def flatten_objects(data):
"""
递归扁平化嵌套字典列表。
假设每个有效节点都包含 person/city/address/facebooklink 字段;
动态键(如 "united states", "ohio")对应子列表,需递归处理。
"""
result = []
# 支持输入为单个 dict 或 list of dict
if isinstance(data, dict):
data = [data]
for item in data:
# 提取当前层级的业务字段(非嵌套值)
base_fields = {}
nested_lists = {}
for key, value in item.items():
# 若 value 是 list 且所有元素均为 dict,则视为嵌套子结构
if isinstance(value, list) and value and all(isinstance(v, dict) for v in value):
nested_lists[key] = value
else:
base_fields[key] = value
# 当前层级有有效字段 → 保存
if base_fields:
result.append(base_fields)
# 递归处理每个嵌套列表
for sublist in nested_lists.values():
result.extend(flatten_objects(sublist))
return result✅ 使用示例:
nested_data = [
{
"person": "abc",
"city": "united states",
"facebooklink": "link",
"address": "united states",
"united states": [
{
"person": "cdf",
"city": "ohio",
"facebooklink": "link",
"address": "united states/ohio",
"ohio": [
{
"person": "efg",
"city": "clevland",
"facebooklink": "link",
"address": "united states/ohio/clevland",
"clevland": [
{
"person": "jkl",
"city": "Street A",
"facebooklink": "link",
"address": "united states/ohio/clevland/Street A",
"Street A": [
{
"person": "jkl",
"city": "House 1",
"facebooklink": "link",
"address": "united states/ohio/clevland/Street A/House 1"
}
]
}
]
},
{
"person": "ghi",
"city": "columbus",
"facebooklink": "link",
"address": "united states/ohio/columbus"
}
]
},
{
"person": "abc",
"city": "washington",
"facebooklink": "link",
"address": "united states/washington"
}
]
}
]
flattened = flatten_objects(nested_data)
for obj in flattened:
print(obj)⚠️ 注意事项:
? 进阶建议:如需保留层级路径信息(例如增加 "level": 2, "parent": "ohio" 字段),可在递归调用时传入上下文参数;若需支持异构结构(混合 list/dict/str),可进一步增强类型判断逻辑。但对本文所示的典型地域树结构,上述实现已简洁、高效且易于维护。
# python
# js
# json
# app
# facebook
# 栈
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
php下载安装后swoole扩展怎么安装_异步框架支持【汇总】
Python与MongoDB NoSQL开发实战_文档模型与索引优化
Win11系统占用空间大怎么办 Win11深度瘦身清理指南【优化】
如何在 ACF 中正确更新嵌套多层的 Group 字段子字段
MySQL 中使用 IF 和 CASE 实现查询字段条件化显示
Win11如何卸载OneDrive_Win11卸载OneDrive方法【教程】
如何在Golang中优化文件读写性能_使用缓冲和并发处理
Go语言中CookieJar的持久化机制解析:内存存储与自定义持久化方案
Win11怎么关闭系统声音_Win11系统提示音静音设置【详解】
Python解释执行模型_字节码流程说明【指导】
如何在Golang中实现文件下载_Golang文件传输与内容类型处理方法
Windows蓝屏错误0x00000023怎么修复_FAT文件系统错误处理
win11如何清理传递优化文件 Win11为C盘瘦身删除更新缓存【技巧】
Win11怎么设置快速访问主页_Windows11资源管理器文件夹选项
Mac怎么给文件夹加密_Mac创建加密磁盘映像教程【安全】
Windows10怎么卸载预装软件_Windows10预装软件卸载步骤【教程】
Windows蓝屏BAD_POOL_HEADER故障详解_蓝屏池损坏错误修复指南
如何使用Golang捕获并记录协程panic_保证主程序稳定运行
如何使用Golang实现基本类型比较_Golang比较操作符使用方法
如何使用Golang实现微服务状态监控_Golang服务运行状态采集方法
php中::能用于接口静态方法吗_接口静态方法调用规则【操作】
手机php怎么转mp4_手机端php文件转mp4app推荐【指南】
Windows10系统怎么查看硬盘健康_Win10 SMART信息检测工具
c++的mutex和lock_guard如何使用 互斥锁保护共享资源【多线程】
MAC如何启用访达侧边栏显示_MAC Finder偏好设置与常用目录添加【教程】
Win10如何更改网络连接_Windows10以太网属性IP配置
Windows10系统怎么查看CPU核心数_Win10逻辑处理器数量查看
Mac的Time Machine怎么用_Mac系统备份与数据恢复【完整指南】
Win11屏幕亮度突然变暗怎么解决_自动变暗问题处理
Linux怎么设置磁盘配额_Linux系统Quota安装与用户空间限制【教程】
如何在Golang中定义接口_抽象方法和多态实现
Win11快速助手怎么用_Win11远程协助连接教程【工具】
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
如何在Golang中写入JSON文件_保存结构体数据到文件
Go 中 := 短变量声明的类型推导机制详解
如何从 Go 的 map[string]interface{} 中安全获取值
如何在Golang中修改数组元素_通过指针实现原地更新
Win11怎么设置按流量计费_Win11限制后台流量消耗【网络】
如何在 Go 开发中正确处理本地包导入与远程模块路径的一致性问题
php控制舵机角度怎么调_php发送pwm信号控制舵机转动【解答】
Windows10系统怎么查看显卡驱动_Win10设备管理器驱动更新
如何在Golang中处理模块包路径变化_Golang包重命名与导入方法
本地php环境出现502错误_nginx或apache502badgateway解决技巧【解答】
Win11怎么设置DNS服务器_Windows11修改网络适配器DNS优选
Python与OpenAI接口集成实战_生成式AI应用场景解析
Win11如何更新显卡驱动 Win11检查和安装设备驱动程序【方法】
c++怎么处理多线程死锁_c++ lock_guard与unique_lock锁管理【技巧】
为什么Go建议使用error接口作为错误返回_Go Error接口设计原因说明
windows如何修改文件默认打开方式_windows设置程序关联教程
c++中如何进行二进制文件读写_c++ read与write函数用法
2025-12-31
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。