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

嵌套列表多索引匹配:将data2的vid映射到data1并避免重复

解决方案

核心思路

把data2按前三个元素分组,存储为**(前三个元素元组): [可用vid列表]**的结构,每次匹配时从对应组的vid列表中按顺序取出一个使用,用完后放回列表末尾,实现循环复用。

代码实现

# 示例数据
data1 = [
    ['a', 'b', 'c', 'info1'],
    ['a', 'b', 'c', 'info2'],
    ['d', 'e', 'f', 'info3'],
    ['x', 'y', 'z', 'info4'],
    ['a', 'b', 'c', 'info5']
]

data2 = [
    ['a', 'b', 'c', 'vid1'],
    ['a', 'b', 'c', 'vid2'],
    ['d', 'e', 'f', 'vid3'],
    ['a', 'b', 'c', 'vid4']
]

# 预处理data2:按前三个元素分组,存储可用vid列表
vid_groups = {}
for item in data2:
    key = tuple(item[:3])
    if key not in vid_groups:
        vid_groups[key] = []
    vid_groups[key].append(item[-1])

# 处理data1
for sublist in data1:
    key = tuple(sublist[:3])
    if key in vid_groups and vid_groups[key]:
        # 取出当前组的第一个vid,放回末尾实现循环复用
        vid = vid_groups[key].pop(0)
        vid_groups[key].append(vid)
        sublist.append(vid)
    else:
        sublist.append('false')

# 输出结果
for item in data1:
    print(item)

代码说明

  1. 预处理data2:遍历data2的每个子列表,用前三个元素组成的元组作为键,把对应的vid添加到该键的列表中,同一匹配组的所有vid会被集中存储。
  2. 处理data1:
    • 提取每个子列表的前三个元素作为匹配键;
    • 若键存在且对应vid列表不为空,取出列表首个vid后放回末尾,保证后续还能复用该vid;
    • 无匹配项时,直接添加'false'。

效果验证

运行代码后,data1的输出结果为:

['a', 'b', 'c', 'info1', 'vid1']
['a', 'b', 'c', 'info2', 'vid2']
['d', 'e', 'f', 'info3', 'vid3']
['x', 'y', 'z', 'info4', 'false']
['a', 'b', 'c', 'info5', 'vid4']

如果继续添加['a','b','c']的子列表,会循环使用vid1、vid2、vid4。

内容的提问来源于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 12:17:12