有没有一种方法可以使用 Counter 来计算出现次数(嵌套列表)
Is there a way to count number of appearances (nested list) using Counter
我有一个嵌套列表,里面有重复项。我想获取每个列表内容及其对应的外观。所以对于嵌套列表我有:
nested_list = [['time', 'company', 'language', 'price', 'description'],
['date', 'language', 'price', 'quantity'],
['time', 'company', 'language', 'price', 'description'],
['quantity', 'time', 'date', description']]
我使用了 nested_list.sort()
结果:
['date', 'language', 'price', 'quantity']
['quantity', 'time', 'date', 'description']
['time', 'company', 'language', 'price', 'description']
['time', 'company', 'language', 'price', 'description']
因此,如果我想将相同的项目(列表)放在一起,一般排序就可以正常工作。但是我怎样才能得到每个人的外表呢?我是否应该遍历整个列表并使用字典来记录每个嵌套列表的内容(字符串值,我确定我曾经在网上读过一些东西说该列表不适合用作字典键值)并计算它的出现次数?
不能使用普通 collections.Counter
因为 TypeError: unhashable type: 'list'
(另一个原因是使用字典是一个坏主意,如果列表用作散列键)。
有办法吗?我是否应该提取每个嵌套列表中的字符串值并将长字符串用作键?
首先将每个列表转换为元组:
from collections import Counter
counts = Counter(tuple(el) for el in nested_list)
#Counter({('time', 'company', 'language', 'price', 'description'): 2, ('quantity', 'time', 'date', 'description'): 1, ('date', 'language', 'price', 'quantity'): 1})
我有一个嵌套列表,里面有重复项。我想获取每个列表内容及其对应的外观。所以对于嵌套列表我有:
nested_list = [['time', 'company', 'language', 'price', 'description'],
['date', 'language', 'price', 'quantity'],
['time', 'company', 'language', 'price', 'description'],
['quantity', 'time', 'date', description']]
我使用了 nested_list.sort()
结果:
['date', 'language', 'price', 'quantity']
['quantity', 'time', 'date', 'description']
['time', 'company', 'language', 'price', 'description']
['time', 'company', 'language', 'price', 'description']
因此,如果我想将相同的项目(列表)放在一起,一般排序就可以正常工作。但是我怎样才能得到每个人的外表呢?我是否应该遍历整个列表并使用字典来记录每个嵌套列表的内容(字符串值,我确定我曾经在网上读过一些东西说该列表不适合用作字典键值)并计算它的出现次数?
不能使用普通 collections.Counter
因为 TypeError: unhashable type: 'list'
(另一个原因是使用字典是一个坏主意,如果列表用作散列键)。
有办法吗?我是否应该提取每个嵌套列表中的字符串值并将长字符串用作键?
首先将每个列表转换为元组:
from collections import Counter
counts = Counter(tuple(el) for el in nested_list)
#Counter({('time', 'company', 'language', 'price', 'description'): 2, ('quantity', 'time', 'date', 'description'): 1, ('date', 'language', 'price', 'quantity'): 1})