我想通过调用 collections.Counter 来计算列表中项目的频率。诀窍是我的列表本身包含列表:
给定:
[[1,"a"], [2,"b"], [3,"c"], [1,"a"], [1,"a"]
制作:
{
([1,"a"], 3),
([2,"b"], 1),
([3,"c"], 1)
}
当我使用我的列表实例化 Counter 时,我得到 TypeError: unhashable type: 'list'.
Counter 可以做我想做的事吗?是否有其他一些(相当有效的)方法可以做到这一点?
最佳答案
Counter
返回一个哈希表。为此, key (正在计算的内容)必须是可散列的。不幸的是,列表不可散列,这就是您看到错误的原因。
一种解决方法是将每个内部列表转换为一个元组
。
from collections import Counter
x = [[1,"a"], [2,"b"], [3,"c"], [1,"a"], [1,"a"]]
Counter(tuple(item) for item in x)
# returns:
Counter({(1, 'a'): 3, (2, 'b'): 1, (3, 'c'): 1})
关于列表列表的python计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46859770/