Python中检查字符串是否在字典内列表的高效简洁实现
检查字符串是否存在于字典的任意列表中
问题描述
我有一个内部包含字符串列表的字典,需要检查某个字符串是否存在于该字典的任意列表中。示例代码如下:
classes = { "class_A" : ["Mike","Alice","Peter"], "class_B" : ["Sam","Robert","Anna"], "class_C" : ["Tom","Nick","Jack"] } students=["Alice","Frodo","Jack"] for student in students: if student *in any of the classes*: print("Is here") else: print("Is not here")
需求:遍历students列表中的每个学生,若该学生存在于任意班级列表中则执行操作A,否则执行操作B,预期输出为Is here, Is not here, Is here。
当前实现存在输入规模扩大时性能不佳的问题,另一个可行的函数实现调用不便,现寻求满足以下要求的简洁一行代码:
- 不复制列表
- 不依赖字典的键
- 简洁易用
- 无需过度工程化的超高效方案
解决方案
简洁实现代码
直接在循环中使用any()结合生成器表达式,一行判断逻辑即可满足需求:
for student in students: print("Is here" if any(student in lst for lst in classes.values()) else "Is not here")
方案符合要求的说明
- 不复制列表:生成器表达式
student in lst for lst in classes.values()不会创建新的列表副本,仅逐个遍历字典中的列表进行检查 - 不依赖字典的键:通过
classes.values()直接获取所有班级列表,完全不涉及字典的键名 - 简洁易用:逻辑直观,直接嵌入循环内,无需额外定义函数或复杂结构
- 性能适中:
any()会在找到第一个匹配项时立即停止遍历(短路求值),避免不必要的计算,常规场景下足够高效,无过度工程化设计
运行结果
执行上述代码后,输出与预期一致:
Is here Is not here Is here
内容的提问来源于stack exchange,提问作者RatoGBM
相关产品推荐
相关产品推荐

