将Counter与列表一起使用

ind*_*der 6 python counter list python-2.7

我如何使用集合库中的计数器将列表列表转换为每个单词整体出现次数的计数?

例如 [['a','b','a','c'], ['a','b','c','d']] -> {a:2, b:2, c:2, d:1}

a,b并且c发生在两个列表中但d仅发生在一个列表中.

fal*_*tru 12

使用生成器表达式set:

>>> from collections import Counter
>>> seq = [['a','b','a','c'], ['a','b','c','d']]
>>> Counter(x for xs in seq for x in set(xs))
Counter({'a': 2, 'c': 2, 'b': 2, 'd': 1})
Run Code Online (Sandbox Code Playgroud)

响应评论,没有生成器表达式:

>>> c = Counter()
>>> for xs in seq:
...     for x in set(xs):
...         c[x] += 1
...
>>> c
Counter({'a': 2, 'c': 2, 'b': 2, 'd': 1})
Run Code Online (Sandbox Code Playgroud)

  • 原始问题中的示例是错误的:“ a”出现3次,而不是2次。提供的答案不包括*总体*发生。 (2认同)
  • @displayname,通过省略 set 调用,您将获得所需的结果。 (2认同)

igo*_*rkf 7

from itertools import chain
from collections import Counter

seq = [['a','b','a','c'], ['a','b','c','d']]
c = Counter(chain(*seq))

print(c)
Counter({'a': 3, 'b': 2, 'c': 2, 'd': 1})
Run Code Online (Sandbox Code Playgroud)