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

Python嵌套列表按key分组:Yes项求和后叠加Non项离零最远值的实现

Python嵌套列表分组累加+极值叠加实现方案

你的原有实现存在一个小漏洞:如果分组内第一个出现的元素标记为Non,初始化时会直接将该元素的第2、3位作为初始累加值,不符合仅对Yes标记元素求和的要求。

以下是符合需求的完整实现代码:

example = [[2,   2, -10, 'Yes'],
           [2,   8,  21, 'Yes'],
           [2,  19,  14, 'Non'],
           [2,  30, -22, 'Non'],
           [4, -15,  31, 'Yes'],
           [4,   2,  17, 'Yes'],
           [4,   3, -90, 'Non']]

dictsum = {}
for item in example:
    key = item[0]
    val1 = item[1]
    val2 = item[2]
    flag = item[3]
    # 初始化分组结构:[yes_val1总和, yes_val2总和, non_val1列表, non_val2列表]
    if key not in dictsum:
        dictsum[key] = [0, 0, [], []]
    if flag == "Yes":
        dictsum[key][0] += val1
        dictsum[key][1] += val2
    else:
        dictsum[key][2].append(val1)
        dictsum[key][3].append(val2)

# 组装最终结果,叠加Non分组的最远零值
result = []
for k, v in dictsum.items():
    # 找val1离零最远的值(绝对值最大),无Non元素时默认加0
    max_val1 = max(v[2], key=abs) if v[2] else 0
    # 找val2离零最远的值,无Non元素时默认加0
    max_val2 = max(v[3], key=abs) if v[3] else 0
    result.append([k, v[0] + max_val1, v[1] + max_val2])

print(result)
# 输出:[[2, 40, -11], [4, -10, -42]]

可选优化建议

  • 若要简化字典存在性判断的逻辑,可以使用Python标准库的collections.defaultdict,初始化代码可简化为:
from collections import defaultdict
dictsum = defaultdict(lambda: [0, 0, [], []])
  • 代码内置了空列表兼容逻辑,若某个分组下没有Non标记的元素,会自动叠加0不会报错,适配更多场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:39:03