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

Python嵌套列表按首元素分组提取值构建无重复映射方法

嵌套列表同组标识与关联值提取方案

原代码问题说明

  • 依赖相邻索引比较判断同组的逻辑存在天然缺陷:为避免越界将循环范围设为len(JJ)-1必然漏掉最后一个元素,同时比较相邻元素相等的逻辑无法正确完成分组聚合
  • 分组完成前直接对key列表转set去重,会打乱原有顺序,彻底破坏key和值的映射关系

正确实现代码

核心思路是直接遍历所有子列表,动态维护当前分组的标识和对应值列表,遇到新标识就将旧分组存入结果,全程保持key和值的绑定关系,从根源上避免索引越界和映射丢失问题。

输出一一对应双列表(完全匹配期望格式)

JJ = [['HC', 0, ' 3.6'], 
      ['HC', 1, ' 3.9'], 
      ['HC', 2, ' 7.0'], 
      ['NC', 7, ' 0.3'], 
      ['NC', 8, ' 0.4'], 
      ['NC', 9, ' 0.5'], 
      ['NC', 10, ' 0.6'], 
      ['NC', 11, ' 0.7'], 
      ['DC', 12, ' 0.8'], 
      [['DC','NC'], 13, ' 0.9']]

list1 = []
list2 = []
current_key = None
current_vals = []

for sub_item in JJ:
    key = sub_item[0]
    # 去除第三个元素的前后空格并转为浮点数,匹配期望输出格式
    val = float(sub_item[2].strip())
    
    if current_key is None:
        # 初始化第一个分组
        current_key = key
        current_vals.append(val)
    elif key == current_key:
        # 同组元素直接追加值
        current_vals.append(val)
    else:
        # 遇到新分组,先把旧分组存入结果
        list1.append([current_key] if not isinstance(current_key, list) else current_key)
        list2.append(current_vals)
        # 重置为新分组
        current_key = key
        current_vals = [val]

# 循环结束后存入最后一个分组,解决漏处理末尾元素的问题
if current_key is not None:
    list1.append([current_key] if not isinstance(current_key, list) else current_key)
    list2.append(current_vals)

执行后得到的结果和期望完全一致:

print(list1)  # [['HC'], ['NC'], ['DC'], ['DC', 'NC']]
print(list2)  # [[3.6, 3.9, 7.0], [0.3, 0.4, 0.5, 0.6, 0.7], [0.8], [0.9]]

输出字典映射版本

如果需要直接得到key到值列表的映射,注意列表类型的key不可哈希,转为元组即可:

result_map = {}
current_key = None
current_vals = []

for sub_item in JJ:
    key = sub_item[0]
    val = float(sub_item[2].strip())
    # 列表类型key转元组,满足字典键的可哈希要求
    map_key = tuple(key) if isinstance(key, list) else (key,)
    
    if current_key is None:
        current_key = map_key
        current_vals.append(val)
    elif map_key == current_key:
        current_vals.append(val)
    else:
        result_map[current_key] = current_vals
        current_key = map_key
        current_vals = [val]

if current_key is not None:
    result_map[current_key] = current_vals

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:42:18