Python中如何用简洁高效的代码检查字典列表中是否存在指定类型值?
检查字典列表中是否存在指定type值的高效简洁写法
先给出待处理的数据和初始变量:
universe_creatures = [ {'type': 'dragon', 'weight': 1400}, {'type': 'kraken', 'weight': 6000}, {'type': 'elf', 'weight': 75} ]
初始化代码:
typ = 'dragon' found = False
几种实现方式对比
1. 手动for循环
这是最直观的实现逻辑,遍历过程中找到匹配项就立即终止循环,仅需一次遍历:
# for loop for c in universe_creatures: if typ == c['type']: found = True break
2. 生成器表达式
这种写法更简洁,核心逻辑和手动for循环完全一致——找到匹配项就停止遍历,不会生成完整的中间集合,额外开销几乎可以忽略:
# generator expression found = typ in (c['type'] for c in universe_creatures)
3. 列表推导式
这种写法效率最低,因为会先完整遍历整个列表生成包含所有type的新列表,再执行in判断,相当于遍历了两次数据,不推荐使用:
# list comprehension # 先迭代一次生成新列表,再用in操作符再次迭代查找 found = typ in [c['type'] for c in universe_creatures]
核心结论
- 生成器表达式相比手动for循环的额外开销极小,完全可以忽略,同时写法更简洁,是兼顾效率和可读性的优选方案。
- 你对生成器表达式比列表推导式高效的判断是正确的:列表推导式会生成完整的中间列表,带来额外的内存占用和两次遍历的开销,而生成器表达式是按需生成元素,找到匹配项就停止。
内容的提问来源于stack exchange,提问作者UpTheIrons
相关产品推荐
相关产品推荐

