如何用Python提取多层嵌套JSON中Address-Zip下的所有VALUE值?
提取任意嵌套Zip编码对应的VALUE值(Python)
核心思路
用递归遍历处理不确定层级的嵌套结构,只要键名包含"Zip"(兼容大小写),就深入查找对应的VALUE字段,直到遍历完所有嵌套层级。
代码实现
首先模拟嵌套数据结构(可替换为你的实际数据):
# 示例嵌套地址数据 sample_address_data = { "Address": { "Zip": { "Zip5": {"VALUE": "12345"}, "Zip4": {"VALUE": "6789"}, "SubZip": { "Zip1": {"VALUE": "001"}, "Zip2": {"VALUE": "002"} } }, "Street": "Main St" }, "BillingAddress": { "Zip": {"VALUE": "98765"} } }
然后定义递归提取函数:
def extract_zip_values(data, results=None): # 初始化结果列表(避免递归时重复创建) if results is None: results = [] # 遍历当前层级的所有键值对 for key, value in data.items(): # 匹配所有带"Zip"的键(不区分大小写) if "zip" in key.lower(): # 如果当前值是字典,继续递归遍历子层级 if isinstance(value, dict): # 找到VALUE字段就存入结果 if "VALUE" in value: results.append((key, value["VALUE"])) # 继续遍历子结构,确保不遗漏深层嵌套的Zip extract_zip_values(value, results) # 处理非字典类型的Zip值(比如直接存储字符串的情况) else: results.append((key, value)) return results
使用示例
# 提取所有Zip对应的VALUE zip_results = extract_zip_values(sample_address_data) # 格式化输出结果 print("提取结果:") for zip_type, value in zip_results: print(f"{zip_type}: {value}")
输出结果
提取结果: Zip: Zip5: 12345 Zip4: 6789 SubZip: Zip1: 001 Zip2: 002 Zip: 98765
自定义调整
- 如果只需要特定类型的Zip(比如仅
Zip5/Zip4),把键判断条件改成:key in ["Zip5", "Zip4", "Zip"] - 如果
VALUE键名大小写不固定(比如value),用value.get("VALUE", "")替代直接索引,避免报错 - 如果要去重或排序,可以对结果列表做后续处理,比如
sorted(list(set(zip_results)))
内容的提问来源于stack exchange,提问作者Jomy
相关产品推荐
相关产品推荐

