You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中展平嵌套对象列表?尝试使用flatten_json的flatten方法

如何展平嵌套层级的对象列表

问题分析

你需要提取嵌套结构中每个层级的独立对象,保留person、city、facebooklink、address四个核心字段,同时移除每个对象中嵌套的子数组字段,最终将所有层级的对象合并为一个扁平列表。

解决方案:递归遍历收集

flatten_json库的flatten方法主要用于将单个嵌套对象的键路径展开为扁平键值对,并不适合直接实现你的需求。更高效的方式是编写一个递归函数,遍历每个层级的对象并收集目标字段:

代码实现

def flatten_nested_structure(input_data):
    result = []
    for item in input_data:
        # 提取当前层级的核心字段
        flat_item = {
            "person": item["person"],
            "city": item["city"],
            "facebooklink": item["facebooklink"],
            "address": item["address"]
        }
        result.append(flat_item)
        
        # 检查并处理嵌套的子列表(键与当前city值一致)
        nested_key = item["city"]
        if nested_key in item and isinstance(item[nested_key], list):
            # 递归处理子列表,合并结果
            result.extend(flatten_nested_structure(item[nested_key]))
    return result

# 测试输入数据
input_list = [
  {
    "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"
      }
    ]
  }
]

# 执行展平并输出结果
import json
flattened_result = flatten_nested_structure(input_list)
print(json.dumps(flattened_result, indent=2))

代码说明

  1. 函数接收对象列表作为输入,初始化空列表存储最终结果。
  2. 遍历每个对象:
    • 提取四个核心字段组成新对象,添加到结果列表中。
    • 检查当前对象是否存在以city值为键的子列表,若存在则递归处理该子列表,将子列表的展平结果合并到总列表。
  3. 最终返回的结果完全匹配你需要的扁平对象列表结构。

关于flatten_json的说明

flatten_json的flatten()方法会将嵌套结构的键路径展开为类似united states_0_person的扁平键,得到的是一个单一的扁平字典,无法直接生成你需要的多个独立对象的列表,因此不适合这个场景。

内容的提问来源于stack exchange,提问作者Tanu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:14:53