Python如何根据匹配元素合并两个多维列表
实现方法
你可以先对list2按匹配键做索引分组,避免双重循环提升运行效率,具体实现如下:
from collections import defaultdict list1 = [['1', '2' ,'A'], ['3','4','D']] list2 = [['A','A1'],['B','B1'],['C','C1'],['D','D1'],['D','D2']] # 构建匹配键到对应值的分组映射 key_map = defaultdict(list) for item in list2: key, val = item[0], item[1] key_map[key].append(val) result = [] for item in list1: match_key = item[-1] # 遍历所有匹配的取值拼接生成新子项 for val in key_map.get(match_key, []): result.append(item.copy() + [val]) print(result) # 输出结果:[['1', '2', 'A', 'A1'], ['3', '4', 'D', 'D1'], ['3', '4', 'D', 'D2']]
如果不想引入额外依赖,也可以用普通字典实现分组逻辑:
list1 = [['1', '2' ,'A'], ['3','4','D']] list2 = [['A','A1'],['B','B1'],['C','C1'],['D','D1'],['D','D2']] key_map = {} for item in list2: key, val = item[0], item[1] if key not in key_map: key_map[key] = [] key_map[key].append(val) result = [] for item in list1: match_key = item[-1] for val in key_map.get(match_key, []): result.append(item + [val]) print(result)
逻辑说明
- 先遍历一次
list2完成分组,时间复杂度为O(n),n为list2的长度 - 再遍历
list1匹配生成结果,时间复杂度为O(m+k),m为list1的长度,k为最终结果的总长度 - 相比两层嵌套循环的实现,数据量较大的时候性能优势更明显
内容的提问来源于stack exchange,提问作者Lorenz
相关产品推荐
相关产品推荐

