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

如何创建按Key聚合Id的无重复Key新列表?

问题:聚合Key对应的Id集合

现有如下oldList,每个元素包含Id字段与Key数组:

oldList= [
    {"Id":1, "Key":["T2","T1"]},
    {"Id":2, "Key":["T3","T5"]},
    {"Id":3, "Key":["T2"]},
    {"Id":4, "Key":["T3","T1"]},
    {"Id":5, "Key":["T2","T4"]},
    {"Id":6, "Key":["T2","T1","T3"]},
]

需要将每个Key对应的所有Id进行聚合,生成无重复Key的新列表newList,格式示例如下:

newList = [
   {"Key":"T1","Ids":[1,4,6]},
   {"Key":"T2", "Ids":[1,3,5,6]},
   {"Key":"T3", "Ids":[2,4,6]},
   {"Key":"T5", "Ids":[2]},
   {"Key":"T4", "Ids":[5]}
]

我曾尝试用嵌套循环提取Id,但代码无法正常工作:

for i in lista_2:
    for KeyId in i["Key"]:
        if KeyId == KeyId :
           #grab Id

解决方案

用字典做中间映射是最高效的方式,字典的键天然唯一,刚好用来存储不重复的Key,值则对应收集到的Id列表。具体实现步骤:

  1. 初始化空字典,用于暂存Key与对应Id的映射关系
  2. 遍历oldList中的每个元素
  3. 对每个元素的Key数组逐一处理,将当前元素的Id添加到字典对应Key的列表中(若Key不存在则先创建空列表)
  4. 最后将字典转换为要求的newList格式

完整代码:

oldList= [
    {"Id":1, "Key":["T2","T1"]},
    {"Id":2, "Key":["T3","T5"]},
    {"Id":3, "Key":["T2"]},
    {"Id":4, "Key":["T3","T1"]},
    {"Id":5, "Key":["T2","T4"]},
    {"Id":6, "Key":["T2","T1","T3"]},
]

# 初始化中间映射字典
key_id_map = {}

for item in oldList:
    current_id = item["Id"]
    for key in item["Key"]:
        # 若Key未在字典中,先初始化空列表
        if key not in key_id_map:
            key_id_map[key] = []
        # 将当前Id加入对应Key的列表
        key_id_map[key].append(current_id)

# 转换为目标格式的newList
newList = [{"Key": k, "Ids": v} for k, v in key_id_map.items()]

# 输出结果
print(newList)

运行后即可得到符合要求的聚合结果,每个Key唯一,对应的Ids集合包含所有关联的Id。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:15:38