Python如何从嵌套循环中返回未在save_file中存在的新增asset_id
现有代码的问题
你当前的嵌套循环逻辑存在两个明显缺陷:
- 每次仅比对单个存档分组的资产ID,只要ID不在当前遍历的分组里就打印不存在,但只要ID在任意一个存档分组的
asset_ids中就属于已存在资产,不需要继续比对 - 没有设置循环终止标记和结果收集逻辑,导致输出大量重复日志,也无法直接得到最终的新ID列表
优化解决方案
建议先把存档中所有已存在的资产ID统一提取为集合,利用集合O(1)的查找效率简化逻辑、提升性能:
# 1. 提取所有存档中已存在的资产ID,存入集合 existing_ids = set() for group_content in save_file.values(): existing_ids.update(group_content["asset_ids"]) # 2. 遍历新数据筛选出未存档的ID new_ids = [] for group_content in new_data.values(): for asset_id in group_content["asset_ids"]: if asset_id not in existing_ids: new_ids.append(asset_id) print(new_ids) # 输出结果:[100]
原有嵌套逻辑的修改方案
如果你不想调整原有嵌套循环的结构,可以新增标记位判断ID是否已存在,匹配到后直接跳出内层循环减少无效遍历:
new_ids = [] for r in new_data: for n in new_data[r]['asset_ids']: is_existed = False for a in save_file: if n in save_file[a]['asset_ids']: is_existed = True break # 匹配到已存在就跳出当前循环,不需要继续比对其他分组 if not is_existed: new_ids.append(n) print(new_ids) # 输出结果:[100]
最终得到的new_ids列表就是所有未在存档文件中存在的新资产ID,你可以直接用这个列表执行后续的业务逻辑和存档更新操作。
内容的提问来源于stack exchange,提问作者Jeff Lenton
相关产品推荐
相关产品推荐

