Python如何更简便获取JSON列表中匹配指定条件的元素?
实现方案
根据你的使用场景,有两种常用的优化方式:
单次查询场景
如果只需要偶尔查询一次匹配条目,你原来的循环逻辑本身已经是最优时间复杂度O(n),可以用next()加生成器表达式简化写法,实现类似字典get()的默认值效果:
wanted_person = "karl" # 找到第一个匹配的条目返回,没匹配到则返回None matched_person = next((p for p in people if p["name"] == wanted_person), None)
这种写法和你原来的循环逻辑完全等价,遍历到第一个匹配项就会停止,不会遍历整个列表。
多次查询场景
如果需要频繁对people列表做姓名查询,最优方案是提前把列表转换为以姓名为key的字典,后续所有查询都是O(1)时间复杂度,完全符合你要的类字典get()调用习惯:
# 提前构建姓名到人物条目的映射字典(假设姓名唯一) people_index = {p["name"]: p for p in people} # 后续直接用字典方法查询 karl = people_index.get("karl") # 也可以自定义未匹配到的默认值 unknown = people_index.get("not_exist", {"name": "未知", "age": -1})
如果存在重名的情况,可以用以下方式存储同名的所有条目:
from collections import defaultdict people_index = defaultdict(list) for p in people: people_index[p["name"]].append(p) # 查询得到所有叫karl的条目列表 karl_list = people_index.get("karl", [])
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

