如何在Python中统计二维列表中重复子列表的出现次数
报错原因
Python 字典的键必须是可哈希的不可变类型,而列表属于可变类型,无法作为字典的键使用。你之前仅将外层列表转为了元组,内层的子元素仍然是列表类型,所以还是触发了TypeError: unhashable type: 'list'报错。
修复方案
方案1:基于原有逻辑修改
只需将内层每个子列表转为元组作为临时计数的键,最终输出时再转回列表即可匹配你的期望格式:
def getDuplicatesWithCount(listOfElems): dictOfElems = dict() for elem in listOfElems: # 子列表转元组作为可哈希的临时键 key = tuple(elem) if key in dictOfElems: dictOfElems[key] += 1 else: dictOfElems[key] = 1 # 最终转换为列表为键的字典输出 return {list(key): value for key, value in dictOfElems.items()} list1 = [[1,2,1,2,1],[1,2,1,1,1],[1,2,1,1,1],[1,2,1,1,1],[1,2,1,2,1],[1,2,1,2,1],[1,2,1,1,1]] dictOfElems = getDuplicatesWithCount(list1) print(dictOfElems)
运行后输出结果为:{[1, 2, 1, 2, 1]: 3, [1, 2, 1, 1, 1]: 4},完全符合需求。
方案2:用标准库简化实现
可以直接使用collections.Counter完成计数逻辑,代码更简洁:
from collections import Counter list1 = [[1,2,1,2,1],[1,2,1,1,1],[1,2,1,1,1],[1,2,1,1,1],[1,2,1,2,1],[1,2,1,2,1],[1,2,1,1,1]] count_result = {list(k): v for k, v in Counter(tuple(elem) for elem in list1).items()} print(count_result)
内容的提问来源于stack exchange,提问作者Nidhi Joraviya
相关产品推荐
相关产品推荐

