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

Python实现:将列表中重复用户的任务数合并同步至对应位置

实现方法及优化建议

基础实现步骤

要解决这个问题,核心是先统计每个用户的总任务数,再将总任务数同步到该用户所有的对应位置。具体分两步:

  1. 统计每个用户的总任务数
    遍历用户列表和任务数列表的配对,用字典记录每个用户的累计任务数:

    users = ['David','David','Noah','Jenny']
    tasksCompleted = [5,5,4,6]
    
    # 初始化字典存储用户总任务数
    user_total_tasks = {}
    # 遍历用户和对应任务数
    for user, task in zip(users, tasksCompleted):
        if user in user_total_tasks:
            # 用户已存在,累加任务数
            user_total_tasks[user] += task
        else:
            # 用户首次出现,初始化任务数
            user_total_tasks[user] = task
    

    执行后user_total_tasks会是{'David': 10, 'Noah': 4, 'Jenny': 6}。

  2. 生成同步后的结果列表
    再次遍历原用户列表,将每个位置替换为该用户的总任务数:

    desiredOutput = [user_total_tasks[user] for user in users]
    print(desiredOutput)  # 输出: [10,10,4,6]
    

简化优化(进阶)

如果想让代码更简洁,可以用collections.defaultdict来简化字典的累加逻辑,不需要判断用户是否存在:

from collections import defaultdict

user_total_tasks = defaultdict(int)
for user, task in zip(users, tasksCompleted):
    user_total_tasks[user] += task

desiredOutput = [user_total_tasks[user] for user in users]

defaultdict(int)会自动给不存在的键初始化值为0,省去了手动判断的步骤,适合处理这类累加场景。

额外建议

  • 参数校验:如果程序需要处理用户输入的列表,可以先校验两个列表长度是否一致,避免出错:
    assert len(users) == len(tasksCompleted), "用户列表和任务数列表长度必须相同"
    
  • 可读性:给变量起清晰的名字(比如user_total_tasks而不是d),方便自己和他人理解代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:27:28