Python字典列表嵌套service_ids字段的服务ID存在性校验实现
现有代码的核心问题
- 存在性判断的匹配范围错误:直接检查目标
service_id是否在attached_dict_list的顶层元素中,没有遍历每个列表条目、匹配条目内嵌的service_ids数组 - 类型不匹配问题:列表内存储的
service_ids为UUID类型,如果传入的目标service_id是字符串格式,直接比对会因类型不一致永远返回False - 数据结构转换缺失:循环时直接追加ORM查询对象,未转换为目标要求的字典结构
正确实现代码
from uuid import UUID # 把ORM查询结果转换为匹配结构的字典列表 attached_list = ServiceAttachment.query.all() attached_dict_list = [] for attach_obj in attached_list: attached_dict_list.append({ "v_id": attach_obj.v_id, "s_id": attach_obj.s_id, "service_ids": attach_obj.service_ids }) # 统一目标service_id的类型,和列表内存储的UUID格式保持一致 target_id = UUID(service_id) if isinstance(service_id, str) else service_id # 遍历所有条目下的service_ids数组,校验目标值是否存在 is_exist = False for item in attached_dict_list: if target_id in item["service_ids"]: is_exist = True break if is_exist: print(target_id)
简化校验写法
不需要提前中断遍历的场景下,可使用生成器表达式压缩校验逻辑:
is_exist = any(target_id in item["service_ids"] for item in attached_dict_list)
内容的提问来源于stack exchange,提问作者Nisha
相关产品推荐
相关产品推荐

