VS Code中Python调用statistics.mode报unhashable type: 'list'错误如何解决
报错原因与解决方案
错误根因
- 报错
TypeError: unhashable type: 'list'是因为statistics.mode底层依赖collections.Counter做元素频次统计,Counter要求被统计的元素必须是可哈希类型(比如数值、字符串、元组,列表属于不可哈希类型) - 你代码中
bv = list(zip(con_list))操作输出的每个元素是包裹了子列表的单元素元组,后续仅转换外层容器为元组的操作没有处理内部嵌套的列表,因此传入mode的序列元素依然包含不可哈希的列表类型 - mean、quantile等函数不需要对元素做哈希计数,仅提取数值计算,因此不会触发该报错
解决方案
直接将嵌套的数据列表打平为一维纯数值序列后再计算众数即可,示例代码如下:
import statistics from scipy.io import loadmat # 原有文件读取逻辑保留 filename = "Demand (MWh)/WB_" + combo_jahr.get() + ".mat" filename = r"{}".format(filename) demand_table = loadmat(filename) con_list = [[element for element in upperElement] for upperElement in demand_table['WB']] # 新增:打平嵌套列表为一维数值序列 flat_demand = [num for sublist in con_list for num in sublist] # 计算众数 mode_result = statistics.mode(flat_demand)
如果数据存在多个众数,Python 3.8+版本可以使用statistics.multimode获取全部众数,也可以自行通过Counter统计:
from collections import Counter cnt = Counter(flat_demand) max_frequency = max(cnt.values()) all_mode = [k for k, v in cnt.items() if v == max_frequency]
内容的提问来源于stack exchange,提问作者Omid Steadieseifi
相关产品推荐
相关产品推荐

