如何基于重复数组值合并字典列表并关联去重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)
代码说明
- 收集ID:遍历每个用户的任务,从
grabId中取出对应ID并合并到列表中 - 去重排序:利用集合
set自动去重,再转回列表并排序,保证ID顺序和示例一致 - 构建条目:复制原用户字典(避免修改原数据),添加
Ids字段后加入list3
注意事项
你提供的期望输出中,Peter的Ids包含3,但3对应的运动项目是Dumbbel,而Peter的任务列表中并没有该项目,这属于笔误。按照逻辑,Peter的正确Ids应为[1,4,5,6]。
内容的提问来源于stack exchange,提问作者Hasunohana
相关产品推荐
相关产品推荐

