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

Python中简化嵌套if语句及JSON题库优化方案咨询

问题解决方案

一、简化getq函数的方案

1. 链式过滤替代嵌套if

把每个过滤条件拆成独立逻辑,用数组filter方法链式调用,完全避免嵌套,可读性和扩展性更强。

假设你的选择题JSON结构大致如下:

{
  "questions": [
    {
      "id": 1,
      "subject": "数学",
      "difficulty": "中等",
      "keywords": ["代数", "方程"],
      "question": "求解方程2x+3=7的解",
      "options": ["A. 1", "B. 2", "C. 3", "D. 4"],
      "answer": "B"
    }
  ]
}

以JavaScript为例,简化后的getq函数:

function getq(params = {}) {
  let filtered = [...questions]; // 复制原数组避免修改原始数据

  // 按科目过滤
  if (params.subject) {
    filtered = filtered.filter(q => q.subject === params.subject);
  }

  // 按难度过滤
  if (params.difficulty) {
    filtered = filtered.filter(q => q.difficulty === params.difficulty);
  }

  // 按关键词过滤(匹配任意一个关键词即可)
  if (params.keywords?.length) {
    filtered = filtered.filter(q => params.keywords.some(k => q.keywords.includes(k)));
  }

  // 新增其他过滤条件只需追加新的filter分支
  return filtered;
}

2. 配置映射式过滤(适合多条件场景)

如果过滤条件很多,可以把每个条件的判断逻辑存入配置对象,循环处理参数,进一步简化核心代码:

// 定义所有过滤规则的映射表
const filterRules = {
  subject: (question, value) => question.subject === value,
  difficulty: (question, value) => question.difficulty === value,
  keywords: (question, values) => values.some(k => question.keywords.includes(k))
};

function getq(params = {}) {
  return questions.filter(question => {
    // 遍历传入的参数,逐一匹配过滤规则
    return Object.entries(params).every(([key, value]) => {
      // 没有对应规则的参数默认通过过滤
      return filterRules[key]?.(question, value) ?? true;
    });
  });
}

新增过滤条件时,只需在filterRules里添加新的逻辑函数,不用修改getq的核心逻辑。

3. 效率优化建议

  • 给高频过滤字段(如科目、难度)建立索引:加载JSON时提前生成索引对象,比如{ "数学": [q1, q2], "语文": [q3] },按科目过滤时直接取对应数组,不用遍历全部数据。
  • 大数据量场景下,改用生成器函数分批返回结果,避免一次性占用过多内存。

二、JSON存储是否合适?

对于编程新手来说,JSON是非常合适的入门选择:

  • 优点:语法简单易读,所有主流编程语言都支持解析,无需额外安装数据库软件,文件可直接用文本编辑器修改。
  • 局限性:如果题目数量超过几千条,或需要频繁修改、并发读写,JSON的性能会明显下降;没有内置查询语法,复杂过滤需自行实现;不支持事务、权限控制等高级功能。

如果只是个人/小团队使用、题目数量不多,JSON完全够用;后期数据量变大或需要更复杂操作时,再切换到SQLite这类轻量级数据库即可。

三、命令行编辑JSON的替代方案

新手不用硬啃命令行,推荐这些友好的工具:

  • 可视化JSON编辑器:VS Code的JSON插件(带语法高亮、格式化、错误提示)、JSON Editor Online(本地网页版,无需联网),直接打开JSON文件就能可视化编辑,还能自动校验格式。
  • 轻量级数据库工具:如果后期换成SQLite,用DB Browser for SQLite,完全可视化操作,不用写SQL命令,适合新手。
  • 脚本批量修改:需要批量更新题目时(比如统一调整难度),写简单的Python/JavaScript脚本,读取JSON文件批量处理后保存,比手动修改效率高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:18:04