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

优化嵌套字典列表过滤:减少循环与避免硬编码的方案

嵌套字典列表的筛选优化方案

假设你的id_config结构示例如下:

id_config = {
    "tables": [
        {"name": "users", "columns": [{"column": "id_person", "type": "int"}, {"column": "name", "type": "str"}]},
        {"name": "orders", "columns": [{"column": "order_id", "type": "int"}, {"column": "some_other_id", "type": "str"}]}
    ]
}

核心优化方向

  • 用集合存储目标列:将目标列列表转为集合,成员检查效率从O(n)降至O(1),大规模目标列场景下优势明显。
  • 列表推导式简化循环:替代多层显式循环,代码更紧凑且执行效率更高。
  • 参数化嵌套路径:避免硬编码层级结构,提升代码复用性。

固定嵌套结构的简化实现

如果嵌套层级固定(如示例中的id_config['tables'] -> 列表元素 -> 'columns'列表 -> 'column'键),直接用嵌套列表推导式:

target_columns = {'id_person', 'some_other_id'}

filtered = [
    col 
    for table in id_config['tables'] 
    for col in table['columns'] 
    if col['column'] in target_columns
]

适配可变嵌套路径的通用实现

如果嵌套结构可能变化,可通过参数化路径实现通用筛选函数:

from functools import reduce

def filter_nested(data, target_keys, nested_path):
    """
    筛选嵌套结构中指定路径下符合条件的元素
    :param data: 原始嵌套字典
    :param target_keys: 目标值集合
    :param nested_path: 嵌套路径列表,如['tables', 'columns', 'column']
    """
    # 逐层遍历嵌套路径,获取待筛选的元素列表
    current_level = data[nested_path[0]]
    for key in nested_path[1:-1]:
        current_level = [item[key] for item in current_level]
        current_level = [elem for sublist in current_level for elem in sublist]
    
    # 筛选目标键匹配的元素
    target_key = nested_path[-1]
    return [item for item in current_level if item[target_key] in target_keys]

# 使用示例
target_columns = {'id_person', 'some_other_id'}
filtered = filter_nested(id_config, target_columns, ['tables', 'columns', 'column'])

优化效果说明

  • 集合查询的高效性:目标列数量越多,集合比列表的查询速度提升越显著。
  • 列表推导式的简洁性:相比多层for循环+append,代码行数更少,可读性更强。
  • 通用函数的扩展性:无需修改核心逻辑,仅调整路径参数即可适配不同嵌套结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:15:56