python列表列表的计数器?

时间:2017-10-21 03:29:16

标签: python list count

我想通过调用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可以做我想要的吗?这样做有其他(合理有效的)方法吗?

2 个答案:

答案 0 :(得分:4)

Counter返回一个哈希表。为了实现这一点,密钥(计算的内容)必须是可清除的。不幸的是,列表不可清除,这就是您看到错误的原因。

一种解决方法是将每个内部列表转换为tuple

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})

答案 1 :(得分:3)

通常只有不可变类型是可清除的。您可以使用map将列表转换为元组。

INDEX