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

Python排序字典结构时lambda报'int' object is not subscriptable错误求助

解决字典按Period排序时的'int' object is not subscriptable错误

首先,咱们来拆解一下你遇到的问题:

错误根源

当你执行sorted(T, key=lambda x:x['Period'])时,Python默认会迭代字典T的键(也就是0、1、2这些整数),所以lambda表达式里的x是个整数,自然没法用x['Period']去访问字典的键值对——这就是为什么会报'int' object is not subscriptable的错误。

另外,你还把排序代码写在了TaskGenerator(6)调用之前,这时候T还是个空字典,排序操作完全没有意义。

修正后的代码

import random
from random import randint

T = dict()

def TaskGenerator(N):
    for i in range(0, N):
        ExcTime = randint(1, 20)
        Period = randint(1, 20) + ExcTime
        Uterlization = ExcTime / Period
        T[i] = {'ID': i+1, 'ExcTime': ExcTime, 'Period': Period, 'Uterlization': Uterlization}

# 先生成任务,再排序
TaskGenerator(6)
# 对字典的值进行排序,获取排序后的任务列表
sorted_tasks = sorted(T.values(), key=lambda x: x['Period'])

# 打印结果看看
for task in sorted_tasks:
    print(task)

关键修改点

  1. 用T.values()替代直接迭代字典:这样sorted会遍历字典里的每个任务字典(也就是{'ID':..., 'Period':...}这类对象),lambda表达式里的x就变成了任务字典,自然可以访问x['Period']。
  2. 调整代码顺序:先调用TaskGenerator(6)生成任务数据,再执行排序操作,确保排序时有数据可用。
  3. 保存排序结果:sorted()函数会返回一个新的排序后的列表,不会修改原字典,所以需要把它赋值给一个变量(比如sorted_tasks)来使用。

额外小提示

如果你想保留原字典的键(也就是0、1这些索引),可以用T.items()来迭代,然后调整lambda的参数:

sorted_tasks_with_keys = sorted(T.items(), key=lambda x: x[1]['Period'])
# 结果是[(键, 任务字典), ...]的格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:27:55