首页 > 解决方案 > 如何在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'
 

标签: python

解决方案


list' 不能是键,因为它们是可变的,因此不可散列。您可以尝试将它们变成tuples。

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}

推荐阅读