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

Python中基于嵌套children键的path值过滤字典列表的实现方法

Python字典列表筛选(保留含public schema的children条目)

核心逻辑说明

  • 遍历每个字典元素,先筛选其children数组中path包含public的子条目
  • 仅保留筛选后children不为空的父字典,同时替换父字典的children为筛选后的结果
  • 处理过程中对原字典做浅拷贝,避免修改原始数据

可复用函数实现

1. 处理完整字典列表的函数

def filter_public_sources(source_list: list[dict]) -> list[dict]:
    public_list = []
    for item in source_list:
        # 筛选children中path含public的条目
        public_children = [
            child for child in item.get("children", []) 
            if "public" in child.get("path", [])
        ]
        if public_children:
            # 拷贝原字典,避免修改原始数据
            filtered_item = item.copy()
            filtered_item["children"] = public_children
            public_list.append(filtered_item)
    return public_list

# 调用示例:不要用list作为变量名,会覆盖Python内置关键字
# public_list = filter_public_sources(你的原始列表变量)

2. 适配Pandas单列应用的函数

如果需要对Pandas中存储单个字典的列做处理,可使用单个元素处理函数配合apply使用:

import pandas as pd

def filter_single_source(item: dict) -> dict | None:
    public_children = [
        child for child in item.get("children", []) 
        if "public" in child.get("path", [])
    ]
    if public_children:
        filtered_item = item.copy()
        filtered_item["children"] = public_children
        return filtered_item
    return None

# Pandas调用示例,假设存储字典的列名为source_col
# df["filtered_source"] = df["source_col"].apply(filter_single_source)
# 去除无public条目的行:df = df.dropna(subset=["filtered_source"])

优化提示

如果你的业务场景中public固定出现在path数组的第二位,可以将判断条件替换为len(child.get("path", [])) >=2 and child.get("path")[1] == "public",执行效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:24:04