python - 如何在python中计算二维列表中的重复列表
问题描述
鉴于:
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]]
输出应该是:
{[1,2,1,2,1] : 3, [1,2,1,1,1] : 4}
已经试过了
def getDuplicatesWithCount(listOfElems):
dictOfElems = dict()
for elem in listOfElems:
if elem in dictOfElems:
dictOfElems[elem] += 1
else:
dictOfElems[elem] = 1
dictOfElems = { key:value for key, value in dictOfElems.items() if value > 1 }
return dictOfElems
dictOfElems = getDuplicatesWithCount(tuple(features))
print(dictOfElems)
但得到错误
TypeError
Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_15000/2333321210.py in <module>
10 return dictOfElems
11
12 dictOfElems = getDuplicatesWithCount(tuple(features))
13 print(dictOfElems)
~\AppData\Local\Temp/ipykernel_15000/2333321210.py in getDuplicatesWithCount(listOfElems)
2 dictOfElems = dict()
3 for elem in listOfElems:
4 if elem in dictOfElems:
5 dictOfElems[elem] += 1
6 else:
TypeError: unhashable type: 'list'
解决方案
list
' 不能是键,因为它们是可变的,因此不可散列。您可以尝试将它们变成tuple
s。
def getDuplicatesWithCount(listOfElems):
dictOfElems = dict()
for elem in map(tuple, listOfElems):
if elem in dictOfElems:
dictOfElems[elem] += 1
else:
dictOfElems[elem] = 1
return { key:value for key, value in dictOfElems.items() if value > 1 }
或使用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]]
result = {i: c for t, c in Counter(map(tuple, list1)).items() if c > 1}
结果:
{(1, 2, 1, 2, 1): 3, (1, 2, 1, 1, 1): 4}
推荐阅读
- python - 瞧,iypwidgets 'nice' loader
- flutter - 颤动:渲染库捕获的异常:RenderFlex 在底部溢出了 n 个像素
- reactjs - 谷歌分析不跟踪页面
- azure-devops - Azure Pipeline Google 测试未作为 .EXE 运行
- python - 如何修改 def __str__ 使其返回不带括号 [] 且不带“,”的矩阵
- sql - Netezza 在 SQL 中为当天的第一条记录值添加新字段
- sql - 实现 Redshift 合并/更新操作的最有效方法是什么
- objective-c - 在 Objective-c 或 Swift 中,每第 n 次循环迭代做一些事情
- python - 使用进度条停止功能不起作用
- python - 在 pandas 上使用 pivot 会引入不需要的 NaN