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

Python如何用嵌套列表推导式分类direct_queried类型报错

列表推导式实现报错分类方案

核心规则:仅统计type为direct_queried的报错记录,indirect_queried类型记录直接排除,按报错关键词对目标名称列表做四分类。

直接可用的列表推导式代码

补全后的代码如下,全部为单行推导逻辑,符合要求:

success = [name for name in names if not any(e['name'] == name and e['type'] == 'direct_queried' for e in errors)]

unauthorized = [name for name in names if any(e['name'] == name and e['type'] == 'direct_queried' and 'denied' in e['error'] for e in errors)]

not_found = [name for name in names if any(e['name'] == name and e['type'] == 'direct_queried' and 'not found' in e['error'] for e in errors)]

unknown = [name for name in names if any(e['name'] == name and e['type'] == 'direct_queried' and 'denied' not in e['error'] and 'not found' not in e['error'] for e in errors)]

代码中使用any()做匹配判断,只要errors中存在符合条件的记录就会命中分类,逻辑完全匹配设定的分类规则。

测试结果说明

基于给出的测试数据运行上述代码,结果如下:

  • success = ['name-2']:name-2对应的报错为indirect_queried类型,无有效直接查询报错,归入成功分类
  • unauthorized = []:给定的待统计names列表为['name-1','name-2','name-3'],其中没有名称匹配含denied的直接查询报错;示例中提到的name-4不在目标名称列表内,默认不会被统计
  • not_found = ['name-3']:name-3的直接查询报错包含not found关键词,符合分类规则
  • unknown = ['name-1']:name-1的直接查询报错为unknown error,不含denied和not found关键词,符合分类规则

如果你需要统计所有直接查询报错的名称(包含不在给定names列表里的name-4),只需要把四个推导式里遍历的迭代对象从names替换为去重后的直接查询名称集合{e['name'] for e in errors if e['type'] == 'direct_queried'}即可,调整后unauthorized的输出为['name-4'],和给出的预期示例完全一致。


性能优化方案(可选)

当errors列表数据量较大时,每次分类都全量遍历errors做any()判断会产生重复计算,推荐先预生成直接查询报错的名称-错误信息映射字典,仅需遍历一次errors,后续分类直接查字典即可,执行效率更高:

# 预生成映射,仅遍历一次errors
direct_err_map = {e['name']: e['error'] for e in errors if e['type'] == 'direct_queried'}

# 分类逻辑直接查字典,无重复遍历
success = [name for name in names if name not in direct_err_map]
unauthorized = [name for name in names if name in direct_err_map and 'denied' in direct_err_map[name]]
not_found = [name for name in names if name in direct_err_map and 'not found' in direct_err_map[name]]
unknown = [name for name in names if name in direct_err_map and 'denied' not in direct_err_map[name] and 'not found' not in direct_err_map[name]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:39:23