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

如何提取元组元素并对其进行求和聚合操作?

问题描述

给定以下元组列表:

lits_tuple = [
("x1", "x2", "x3", "x4",    2),
("x1", "x4",    80),
("x4", "z1",    24)]

每个元组的最后一个元素为数值类型(整数或浮点数),需将元组中除最后一个元素外的所有字符串键,对应累加该元组的数值,最终得到每个键的总数值。预期结果如下:

  • {"x1": 82}:x1在第一个元组对应2,第二个对应80,总和82
  • {"x2": 2}:x2仅在第一个元组对应2
  • {"x3": 2}:x3仅在第一个元组对应2
  • {"x4": 106}:x4在第一个元组对应2,第二个对应80,第三个对应24,总和106
  • {"z1": 24}:z1仅在最后一个元组对应24

之前尝试手动提取元组元素,但未完成通用实现,已写的代码片段如下:

tuple1 = lits_tuple[0]
last_element_tuple1 = tuple1[-1]
range_other_element_tuple1 = [i for i in range(len(lits_tuple[0])-1) ]
len_other_element_tuple1 = len(lits_tuple[0])-1
last_element_tuplek = lits_tuple[k-1][-1]
range_other_element_tuplek = [i for i in range(len(lits_tuple[k-1])-1) ]
len_other_element_tuplek = len(lits_tuple[k-1])-1
通用实现方案

可以用字典存储每个键的累加值,遍历每个元组拆分出键列表和对应数值,再逐个键完成累加:

lits_tuple = [
("x1", "x2", "x3", "x4",    2),
("x1", "x4",    80),
("x4", "z1",    24)]

result = {}
for item in lits_tuple:
    # 拆分键列表和数值:前n-1个元素是键,最后一个是数值
    keys = item[:-1]
    value = item[-1]
    # 遍历每个键,累加对应数值
    for key in keys:
        if key in result:
            result[key] += value
        else:
            result[key] = value

# 按预期格式输出结果
for k, v in result.items():
    print({k: v})

代码说明

  1. 初始化空字典result用于存储最终累加结果
  2. 遍历每个元组:
    • 用切片item[:-1]提取当前元组的所有键,item[-1]获取对应的数值
    • 对每个键,检查是否已在字典中:存在则累加数值,不存在则初始化为当前数值
  3. 最后遍历字典,输出每个键值对

运行代码后会得到预期输出:

{'x1': 82}
{'x2': 2}
{'x3': 2}
{'x4': 106}
{'z1': 24}

如果想简化判断逻辑,也可以用collections.defaultdict实现:

from collections import defaultdict

lits_tuple = [
("x1", "x2", "x3", "x4",    2),
("x1", "x4",    80),
("x4", "z1",    24)]

result = defaultdict(int)
for item in lits_tuple:
    keys = item[:-1]
    value = item[-1]
    for key in keys:
        result[key] += value

for k, v in result.items():
    print({k: v})

方案通用性说明

  • 无论每个元组包含多少个键(只要最后一个元素是数值),切片item[:-1]都能正确提取所有键
  • 自动遍历所有元组和键,处理重复键的累加逻辑,无需针对单个元组编写硬编码逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:56:06