You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python/Scala中分组聚合两个列表并处理缺失匹配项

合并两个列表并匹配对应元素

输入列表

L1 = [("A","p1",20), ("B","p2",30)]
L2 = [("A","p1",100), ("c","p3",35)]

期望输出

[("A","p1",20,100), ("B","p2",30,"not in L2"), ("c","p3",35,"not in L1")]

问题描述

尝试用两个for循环遍历L1和L2,但无法正确处理元素匹配,还会生成重复输出,求实现上述需求的方法。

解决方案

用字典+集合替代双重循环,既能避免重复输出,又能提升查找效率:

步骤1:将L2转为字典,实现快速匹配

把L2的前两个元素作为唯一键,第三个元素作为对应值,这样可以在O(1)时间内完成查找:

l2_dict = {(item[0], item[1]): item[2] for item in L2}

步骤2:处理L1中的所有元素

遍历L1,为每个元素拼接L2中对应的值;若找不到匹配项,则拼接"not in L2":

result = []
for item in L1:
    key = (item[0], item[1])
    # 用get方法,找不到则返回默认值
    match_val = l2_dict.get(key, "not in L2")
    result.append(item + (match_val,))

步骤3:处理L2中独有的元素

先提取L1的所有键存入集合,再遍历L2,将不在L1中的元素拼接"not in L1"后加入结果:

# 用集合存储L1的键,加快存在性判断
l1_keys = {(item[0], item[1]) for item in L1}
for item in L2:
    key = (item[0], item[1])
    if key not in l1_keys:
        result.append(item + ("not in L1",))

最终效果

运行上述代码后,result变量将直接得到你需要的输出结果。

为什么不推荐双重循环?

双重循环会让每个L1元素与每个L2元素逐一对比,时间复杂度为O(n*m),不仅效率低,还会因重复匹配生成多余结果。而字典+集合的方式时间复杂度仅为O(n+m),逻辑清晰且无冗余输出。

内容的提问来源于stack exchange,提问作者Big data Pyspark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:30:17