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

Jupyter中Python sorted()排序词频报'list' object not callable错误

报错核心原因

触发TypeError: 'list' object is not callable的根源在排序行的参数传递错误:
sorted()函数的key参数要求传入可调用的函数对象,用于接收序列中的每个元素、返回用于排序比对的权重值。
你当前代码写的是key=freq.values():freq.values()是会立即执行的字典方法,执行后返回存储所有频率值的列表/字典视图对象——你把这个不可调用的列表对象传给了key参数,sorted内部尝试调用这个对象获取排序值时,就会抛出类型错误。

注意:本次报错不属于常见的“变量名覆盖内置类型”的场景,从堆栈定位看,错误完全来自key参数的传值逻辑偏差。

修正方案

要实现按单词出现频率从高到低排序、取Top3单词的目标,需要做三处调整:

  • 不要直接对字典本身做迭代排序,改用freq.items()获取所有(单词, 频率)的键值对集合,避免排序过程中丢失单词和频率的关联关系
  • 给key参数传入可调用的排序规则,指定按键值对里的频率值作为排序依据
  • 补充reverse=True参数实现降序排列,排完后列表前3位就是出现频率最高的单词

修正后的完整可运行代码:

content=open("Assignment1_Q8.txt").read().split()
freq={}
for item in content:
    if item in freq:
        freq[item]+=1
    else:
        freq[item]=1

print(freq)
# 按频率从高到低排序,返回(单词, 出现次数)格式的有序列表
freq_sort = sorted(freq.items(), key=lambda item: item[1], reverse=True)
# 提取前3条记录里的单词,得到频率最高的3个词
top3_words = [word for word, count in freq_sort[:3]]
print(f"出现频率最高的3个单词:{top3_words}")
补充说明

如果只需要排序后的单词列表、不需要保留对应频率值,也可以简化写法:

# 直接对字典的键做排序,按对应频率降序
freq_sort = sorted(freq, key=lambda word: freq[word], reverse=True)

这种写法和原代码的迭代逻辑更接近,但排序过程中没法直接拿到每个单词对应的频率数值,灵活度不如直接排序items()的写法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 07:06:03