Python如何通过指定键值对从字典列表中获取目标字典,有没有更高效方法?
方案1:仅单次查询场景
如果只需要执行一次匹配查询,没有比全列表遍历效率更高的方案了,时间复杂度为固定的O(n)。你的现有代码还可以简化,多余的else continue可以直接去掉:
for enrollment in enrollments: if enrollment['account_key'] == a: print(enrollment)
如果需要获取第一个匹配的字典(确认匹配结果唯一时),可以用更简洁的生成器写法:
target = next((e for e in enrollments if e['account_key'] == a), None) if target: print(target)
方案2:多次按同一key查询场景
如果需要反复根据account_key做匹配查询,可以先把原列表转换成以该key为索引的映射字典,后续单次查询的时间复杂度可以降到O(1),整体效率远高于每次遍历全列表。
单key对应唯一字典的情况
# 前置构建索引,成本为O(n) enrollment_map = {e['account_key']: e for e in enrollments} # 后续直接查询 print(enrollment_map.get(a))
单key对应多个字典的情况
from collections import defaultdict # 前置构建索引,相同key的字典存入列表 enrollment_map = defaultdict(list) for e in enrollments: enrollment_map[e['account_key']].append(e) # 后续直接查询所有匹配项 print(enrollment_map.get(a, []))
特殊场景优化
如果原列表本身已经按照account_key排序,可以用二分查找实现单次查询O(logn)的时间复杂度,效率高于全量遍历,可通过Python标准库bisect模块实现对应逻辑。
内容的提问来源于stack exchange,提问作者Luka
相关产品推荐
相关产品推荐

