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

如何用Python核心语法实现类似SQL的列表连接操作?

基于Python核心语法实现元组列表的连接操作

首先定义两个原始列表:

list1 = [(100, 'Steven', '515.123.4567'), (101, 'Neena', '515.123.4568'), (102, 'Lex', '515.123.4569')]
list2 = [(100, 'Engineer', '515.123.4567'), (101, 'Doctor', '515.123.4568')]

1. 内连接实现

先把list2转换成以元组首元素为键的字典,提升匹配效率:

# 构建映射字典:键为ID,值为对应职位
list2_dict = {item[0]: item[1] for item in list2}

# 内连接:仅保留两边都存在对应ID的记录
inner_join = []
for item in list1:
    if item[0] in list2_dict:
        # 拼接原元组与匹配到的职位
        inner_join.append(item + (list2_dict[item[0]],))

print(inner_join)
# 输出:[(100, 'Steven', '515.123.4567', 'Engineer'), (101, 'Neena', '515.123.4568', 'Doctor')]

2. 左外连接实现

基于同一映射字典,遍历list1所有元素,无匹配项时用None填充:

# 左外连接:保留list1全部记录,无匹配项用None补位
left_outer_join = []
for item in list1:
    # get方法指定默认值,无匹配时返回None
    position = list2_dict.get(item[0], None)
    left_outer_join.append(item + (position,))

print(left_outer_join)
# 输出:[(100, 'Steven', '515.123.4567', 'Engineer'), (101, 'Neena', '515.123.4568', 'Doctor'), (102, 'Lex', '515.123.4569', None)]

关键说明

  • 用字典做映射将匹配操作的时间复杂度从O(n*m)降至O(n+m),比双重循环遍历更高效
  • 元组通过+操作符实现拼接,生成新的元组(元组为不可变类型)
  • Python中用None替代需求中的null,语义一致

内容的提问来源于stack exchange,提问作者Jim Macaulay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:10:54