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

Python报错Expected dict, got list:字典值排序问题排查

解决排序字典值后出现"Expected dict, got list"的问题

我一眼就看出问题出在哪啦!你这段代码的核心错误是把排序后的列表当成字典来用了,咱们一步步拆解:

错误原因分析

你写的第一行代码:

cdef dict task_ranku_sorted = sorted(task_ranku.values())

task_ranku.values()会取出字典里所有的数值,sorted()对这些数值排序后,返回的是一个排序后的数值列表,根本不是字典!你却把它赋值给了dict类型的变量,这本身就不符合类型要求。

然后第二行:

for key, value in task_ranku_sorted.iteritems():

iteritems()是字典独有的方法,列表根本没有这个方法,而且列表里只有数值,没有键值对,自然会报错。

正确的实现方式

如果你想保留键值对,同时按照task_ranku的值排序,应该对字典的键值对元组进行排序,而不是只取values。修改后的代码如下:

# 按值排序,保留键值对,返回的是元素为(key, value)元组的列表
cdef list task_ranku_sorted = sorted(task_ranku.items(), key=lambda x: x[1])
# 如果需要倒序排序,加上reverse=True即可:
# cdef list task_ranku_sorted = sorted(task_ranku.items(), key=lambda x: x[1], reverse=True)

# 遍历排序后的列表,直接拆包键值对
for key, value in task_ranku_sorted:
    print(key, value)

关键说明:

  1. task_ranku.items()会返回字典中所有的键值对元组,比如(task_obj, rank_value)
  2. sorted()的key=lambda x: x[1]指定了**按元组的第二个元素(也就是字典的值)**来排序
  3. 排序后的结果是一个列表,每个元素是键值对元组,遍历的时候直接拆包key和value就可以,不需要用iteritems()

这样修改后,就能正确打印出按ranku值排序后的键值对啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:36:42