如何合并两个字典数组,按x字段匹配并补全缺失值?
合并字典数组并按指定键匹配补全字段
可以通过构建映射字典+遍历合并的方式高效实现需求,步骤如下:
- 先将第二个数组
second转换为以x字段为键、b字段为值的映射字典,后续查找匹配项的时间复杂度为O(1); - 遍历第一个数组
first,对每个字典进行复制并补充b字段——如果在映射字典中找到对应x的值则填入,否则设为None。
完整代码示例
first = [{'x': 'name1', 'a': '333'}, {'x': 'name2', 'a': '234'}, {'x': 'name3', 'a': '432'}, {'x': 'name4', 'a': '943'}, {'x': 'name5', 'a': '643'}] second = [{'x': 'name1', 'b': '1333'}, {'x': 'name2', 'b': '1234'}, {'x': 'name3', 'b': '1432'}, {'x': 'name4', 'b': '1943'}] # 构建x到b的快速映射 second_b_map = {item['x']: item['b'] for item in second} # 生成合并后的结果数组 result = [ {**item, 'b': second_b_map.get(item['x'], None)} for item in first ] print(result)
代码说明
- 用字典推导式构建
second_b_map,把second里的元素按x分组,快速定位对应的b值; - 利用字典解包
**item复制原字典,再通过get方法设置b字段——get的第二个参数是找不到匹配时的默认值(这里设为None); - 整体时间复杂度为O(n+m)(n是
first长度,m是second长度),比嵌套循环的O(n*m)效率更高,适合处理大数据量场景。
内容的提问来源于stack exchange,提问作者groutch
相关产品推荐
相关产品推荐

