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

如何在Python中对列表的列表分组并聚合用户数据?

按用户分组累加time、cpus、mem数值的解决方案

我明白你要做的是按用户分组,把每个用户对应的time、cpus、mem数值分别累加,对吧?这其实用Python的字典就能轻松搞定,我给你两种实现方式,你可以按需选择:

方法一:基础字典实现

适合不想引入额外模块的场景,逻辑清晰直观:

# 示例输入数据(替换成你的真实数据)
data = [
    ['user1', 10, 2, 4],
    ['user1', 20, 3, 5],
    ['user2', 15, 1, 3],
    ['user3', 5, 4, 2],
    ['user2', 5, 2, 1]
]

# 初始化字典存储每个用户的累计值
user_totals = {}

# 遍历每条数据
for entry in data:
    username, time, cpus, mem = entry
    # 如果用户已在字典中,就累加对应数值
    if username in user_totals:
        user_totals[username][0] += time
        user_totals[username][1] += cpus
        user_totals[username][2] += mem
    # 如果是新用户,初始化累计值
    else:
        user_totals[username] = [time, cpus, mem]

# 转换成你需要的列表格式:[用户名, 总时间, 总cpus, 总mem]
result = [[user] + totals for user, totals in user_totals.items()]

print(result)

运行后输出:

[['user1', 30, 5, 9], ['user2', 20, 3, 4], ['user3', 5, 4, 2]]

方法二:使用collections.defaultdict简化代码

如果想让代码更简洁,可以用Python标准库的defaultdict,它会自动为新用户初始化默认的累加起始值:

from collections import defaultdict

# 示例输入数据
data = [
    ['user1', 10, 2, 4],
    ['user1', 20, 3, 5],
    ['user2', 15, 1, 3],
    ['user3', 5, 4, 2],
    ['user2', 5, 2, 1]
]

# 初始化defaultdict,默认值为[0, 0, 0](对应time、cpus、mem的初始累加值)
user_totals = defaultdict(lambda: [0, 0, 0])

for entry in data:
    username, time, cpus, mem = entry
    # 直接累加,不用判断用户是否存在
    user_totals[username][0] += time
    user_totals[username][1] += cpus
    user_totals[username][2] += mem

# 转换成目标列表格式
result = [[user] + totals for user, totals in user_totals.items()]

print(result)

两种方法最终的效果是一样的,你可以根据自己的代码习惯选择。

内容的提问来源于stack exchange,提问作者Jamal 'kRUSER' Benson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:58:42