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

基于元组列表生成字典:按最后一列键汇总第三列数值

按语言分组求和的Python实现方案

嘿,我给你几个实用的Python解法,轻松搞定这个按元组最后一列(语言)分组、第三列数值求和的需求:

方法1:基础循环实现(新手友好)

这个方法逻辑最直观,适合刚接触Python的朋友理解:

tuple_list = [(2018, '2', '172767270', '202', 'gege', 'French'), 
              (2012, '212', '56007072', '200', 'cdadcadc', 'Minangkabou'), 
              (2013, 'J21', '186144990', '200', 'sacacs', 'Latin'),
              (2020, '3', '1374767888', '201', 'test', 'French')]

result = {}
for item in tuple_list:
    # 提取语言(元组最后一列)和第三列的数值(转成整数才能求和)
    lang = item[-1]
    num = int(item[2])
    # 判断语言是否已在字典中,存在则累加,不存在则初始化
    if lang in result:
        result[lang] += num
    else:
        result[lang] = num

print(result)
# 输出结果: {'French': 1547535158, 'Minangkabou': 56007072, 'Latin': 186144990}

方法2:用collections.defaultdict简化代码

如果不想写繁琐的判断语句,用collections.defaultdict可以让代码更简洁:

from collections import defaultdict

tuple_list = [(2018, '2', '172767270', '202', 'gege', 'French'), 
              (2012, '212', '56007072', '200', 'cdadcadc', 'Minangkabou'), 
              (2013, 'J21', '186144990', '200', 'sacacs', 'Latin'),
              (2020, '3', '1374767888', '201', 'test', 'French')]

# 初始化默认值为0的字典
result = defaultdict(int)
for item in tuple_list:
    result[item[-1]] += int(item[2])

# 可选:转成普通字典(如果不需要defaultdict的特性)
result = dict(result)

print(result)

defaultdict(int)会自动给新出现的键赋值0,所以我们可以直接累加,省去了判断键是否存在的步骤。

方法3:用itertools.groupby(适合有序数据)

如果你的数据可以先按语言排序,itertools.groupby是个不错的选择:

from itertools import groupby

tuple_list = [(2018, '2', '172767270', '202', 'gege', 'French'), 
              (2012, '212', '56007072', '200', 'cdadcadc', 'Minangkabou'), 
              (2013, 'J21', '186144990', '200', 'sacacs', 'Latin'),
              (2020, '3', '1374767888', '201', 'test', 'French')]

# 先按语言排序,因为groupby要求相同键的元素必须连续
sorted_list = sorted(tuple_list, key=lambda x: x[-1])
result = {}
# 按语言分组,然后对每组的第三列数值求和
for lang, group in groupby(sorted_list, key=lambda x: x[-1]):
    result[lang] = sum(int(item[2]) for item in group)

print(result)

注意:使用groupby之前必须先排序,否则相同语言的元组如果不连续,会被分成不同的组,导致结果错误。

方法4:用pandas快速处理(适合大数据量)

如果你的数据量很大,用pandas会更高效,代码也更简洁:

import pandas as pd

tuple_list = [(2018, '2', '172767270', '202', 'gege', 'French'), 
              (2012, '212', '56007072', '200', 'cdadcadc', 'Minangkabou'), 
              (2013, 'J21', '186144990', '200', 'sacacs', 'Latin'),
              (2020, '3', '1374767888', '201', 'test', 'French')]

# 把元组列表转成DataFrame
df = pd.DataFrame(tuple_list, columns=['year', 'col2', 'num', 'col4', 'name', 'lang'])
# 把第三列的字符串转成整数类型
df['num'] = df['num'].astype(int)
# 按语言分组求和,再转成字典
result = df.groupby('lang')['num'].sum().to_dict()

print(result)

pandas的分组功能专门针对大数据量优化,处理几万甚至几十万条数据时,效率会比纯Python循环高很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:03:12