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

不同索引长度嵌套列表匹配:提取对应关联字段

需求说明

我有两个嵌套列表:

data1 = [["tr1", 1000, 6798381], ["tr1", 1000, 6798381], ["tr2", 1200, 6798381], ["tr4", 1200, 6798381]]

data2 = [["tr1", 1000, 6798381, "vid1"], ["tr1", 1000, 6798381, "vid2"], ["tr2", 1200, 6798381, "vid3"], ["tr3", 1200, 6798381, "vid4"]]

data2_but_same_index = [["tr1", 1000, 6798381], ["tr1", 1000, 6798381], ["tr2", 1200, 6798381], ["tr3", 1200, 6798381]]

我需要仅对比两个列表子元素的前3个索引值,匹配成功时获取data2对应子列表的第4个索引元素(如vid1、vid2等)。

当对比索引长度相同的data1和data2_but_same_index时,我用以下代码实现了匹配判断:

data1 = [["tr1", 1000, 6798381], ["tr1", 1000, 6798381], ["tr2", 1200, 6798381], ["tr4", 1200, 6798381]]

data2 = [["tr1", 1000, 6798381, "vid1"], ["tr1", 1000, 6798381, "vid2"], ["tr2", 1200, 6798381, "vid3"], ["tr3", 1200, 6798381, "vid4"]]

data2_but_same_index = [["tr1", 1000, 6798381], ["tr1", 1000, 6798381], ["tr2", 1200, 6798381], ["tr3", 1200, 6798381]]

for x in data1 :
  if x in data2_but_same_index :
    print("true")
  else :
    print("false")

输出结果:

true
true
true
false

我希望用类似逻辑对比data1和data2,匹配成功时返回data2对应子列表的第4个索引元素(vid1/vid2/vid3/vid4)。

更新后的data1数据

data1 = [["tr3", 1200, 6798381], ["tr1", 1001, 6798381],["tr1", 1001, 6798381],["tr1", 1000, 6798381], ["tr1", 1000, 6798381], ["tr2", 1200, 6798381], ["tr4", 1200, 6798381]]

解决方案

可以先把data2转换成字典,键为子列表的前3个元素组成的元组(列表无法作为字典键,元组可以),值为对应的第4个元素。这种方式能实现O(1)的查找效率,比嵌套循环更高效。

代码实现:

data1 = [["tr3", 1200, 6798381], ["tr1", 1001, 6798381],["tr1", 1001, 6798381],["tr1", 1000, 6798381], ["tr1", 1000, 6798381], ["tr2", 1200, 6798381], ["tr4", 1200, 6798381]]
data2 = [["tr1", 1000, 6798381, "vid1"], ["tr1", 1000, 6798381, "vid2"], ["tr2", 1200, 6798381, "vid3"], ["tr3", 1200, 6798381, "vid4"]]

# 构建映射字典,处理重复键:若存在多个前3元素相同的子列表,保存所有对应vid
vid_map = {}
for item in data2:
    key = tuple(item[:3])
    if key not in vid_map:
        vid_map[key] = []
    vid_map[key].append(item[3])

# 遍历data1查找匹配项
for x in data1:
    key = tuple(x)
    if key in vid_map:
        print(vid_map[key])  # 若只需单个匹配vid,可改为print(vid_map[key][0])
    else:
        print("false")

输出结果:

['vid4']
false
false
['vid1', 'vid2']
['vid1', 'vid2']
['vid3']
false

若只需返回任意一个匹配的vid(如第一个),修改打印逻辑为print(vid_map[key][0])后,输出变为:

vid4
false
false
vid1
vid1
vid3
false

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:54:55