Python中基于另一字典列表快速更新字典列表匹配项键值的最优方法
优化方案
你原来的嵌套循环时间复杂度为 O(m*n)(m为dictB长度,n为dictA长度),数据量较大时执行效率很低。更高效的实现方式是先将dictB转换为以Cases值为键的哈希查找表,整体时间复杂度可降到 O(m+n),仅需各遍历两个列表一次。
具体实现代码如下:
# 第一步:预处理dictB为查找映射表 update_map = { item["Cases"]: {"vertical": item["vertical"], "horizontal": item["horizontal"]} for item in dictB } # 第二步:遍历dictA直接匹配更新 for item in dictA: case_id = item["Cases"] if case_id in update_map: # 直接用update方法批量更新字段,代码更简洁 item.update(update_map[case_id])
如果后续需要更新的字段有扩展,也可以用更通用的写法,自动提取除了Cases之外的所有字段做更新(注意如果不需要修改原dictB,要先做拷贝):
# 不修改原dictB的通用写法 update_map = {} for item in dictB: item_copy = item.copy() case_id = item_copy.pop("Cases") update_map[case_id] = item_copy for item in dictA: if item["Cases"] in update_map: item.update(update_map[item["Cases"]])
如果dictB中存在相同Cases值的多条数据,后面的条目会覆盖前面的,逻辑和你原来的嵌套循环实现完全一致,且数据量越大的场景下,这种实现的性能优势越突出。
内容的提问来源于stack exchange,提问作者Quang Tran
相关产品推荐
相关产品推荐

