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

如何基于重复数组值合并字典列表并关联去重ID?

生成关联用户任务的去重ID列表

问题描述

现有两个字典列表:

  • list1:存储用户名称及其对应的任务数组
  • list2:存储ID及其对应的运动项目数组

已通过代码生成运动项目到ID的映射grabId,需要生成list3,每个条目包含用户的Name、Tasks,以及所有关联任务对应的去重ID列表。

解决方案代码

list1 = [
    {"Name": "Richard", "Tasks":["Deadlifts","Jump"]},
    {"Name": "Peter", "Tasks": ["Jump", "OverHead"]},
    {"Name": "Paul", "Tasks": ["Dumbbel","Jump"]} 
]

list2 = [
    {"Id":1, "Exercise":["Deadlifts","Jump"]},
    {"Id":2, "Exercise":["Deadlifts"]},
    {"Id":3, "Exercise":["Dumbbel"]},
    {"Id":4, "Exercise":["OverHead","Jump"]},
    {"Id":5, "Exercise":["Deadlifts","Jump"]},
    {"Id":6, "Exercise":["Jump","Dumbbel","OverHead"]},
]

# 生成运动项目到对应ID的映射
grabId = {}
for item in list2:
    for exercise in item["Exercise"]:
        grabId.setdefault(exercise, []).append(item["Id"])

# 构建目标列表list3
list3 = []
for user in list1:
    # 收集当前用户所有任务对应的ID
    collected_ids = []
    for task in user["Tasks"]:
        collected_ids.extend(grabId[task])
    # 去重并排序,保证ID有序
    unique_sorted_ids = sorted(list(set(collected_ids)))
    # 复制用户信息并添加去重后的ID列表
    user_entry = user.copy()
    user_entry["Ids"] = unique_sorted_ids
    list3.append(user_entry)

# 输出结果
print(list3)

代码说明

  1. 收集ID:遍历每个用户的任务,从grabId中取出对应ID并合并到列表中
  2. 去重排序:利用集合set自动去重,再转回列表并排序,保证ID顺序和示例一致
  3. 构建条目:复制原用户字典(避免修改原数据),添加Ids字段后加入list3

注意事项

你提供的期望输出中,Peter的Ids包含3,但3对应的运动项目是Dumbbel,而Peter的任务列表中并没有该项目,这属于笔误。按照逻辑,Peter的正确Ids应为[1,4,5,6]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:24:31