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

Python:将字典列表中的任务优先级重新从0开始编号

问题:重新为任务列表的优先级从0开始编号

给定任务列表:

tasks = [{'priority': 2, 'task': 'math', 'complete_time': 15},
{'priority': 10, 'task': 'french', 'complete_time': 90},
{'priority': 5, 'task': 'geography', 'complete_time': 45},
{'priority': 2, 'task': 'math', 'complete_time': 100}]

需要将优先级从0开始重新编号,最终得到:

[
{'priority':0, 'task':'math', 'complete_time': 15},
{'priority':0, 'task':'math', 'complete_time': 100},
{'priority':1, 'task':'geography', 'complete_time': 45},
{'priority':2, 'task':'french', 'complete_time': 90},
]

已完成步骤:提取了所有唯一优先级对应的字典集合

tasks_set = list({x['priority']:x for x in tasks}.values())

得到结果:

[{'priority': 2, 'task': 'math', 'complete_time': 100},
 {'priority': 10, 'task': 'french', 'complete_time': 90},
 {'priority': 5, 'task': 'geography', 'complete_time': 45}]

解决方案

核心思路:先对原优先级按升序排序,建立原优先级到新编号的映射关系,再遍历原列表替换每个任务的优先级值。

步骤1:提取并排序唯一的原优先级

不需要保留完整字典,只提取所有唯一的优先级值并按升序排列:

# 获取所有唯一的原优先级,按升序排列
unique_priorities = sorted({task['priority'] for task in tasks})

执行后unique_priorities为[2,5,10]

步骤2:建立原优先级到新编号的映射

用enumerate生成从0开始的编号,对应排序后的原优先级:

priority_map = {old_p: new_p for new_p, old_p in enumerate(unique_priorities)}

执行后priority_map为{2:0, 5:1, 10:2}

步骤3:更新任务列表的优先级

遍历原列表,替换每个任务的priority字段:

# 方式1:生成新列表(不修改原列表)
updated_tasks = [
    {
        'priority': priority_map[task['priority']],
        'task': task['task'],
        'complete_time': task['complete_time']
    }
    for task in tasks
]

# 方式2:直接修改原列表
for task in tasks:
    task['priority'] = priority_map[task['priority']]

最终结果

执行后得到的updated_tasks(或修改后的原tasks)即为目标结果:

[
{'priority':0, 'task':'math', 'complete_time': 15},
{'priority':0, 'task':'math', 'complete_time': 100},
{'priority':1, 'task':'geography', 'complete_time': 45},
{'priority':2, 'task':'french', 'complete_time': 90},
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:55:34