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)
关键修改点
- 用
T.values()替代直接迭代字典:这样sorted会遍历字典里的每个任务字典(也就是{'ID':..., 'Period':...}这类对象),lambda表达式里的x就变成了任务字典,自然可以访问x['Period']。 - 调整代码顺序:先调用
TaskGenerator(6)生成任务数据,再执行排序操作,确保排序时有数据可用。 - 保存排序结果:
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
相关产品推荐
相关产品推荐

