Search code examples
pythonlistpython-2.7counter

Using Counter with list of lists


How would I use the Counter in the collections library to convert a list of lists into a count of the number of times each word occurs overall?

E.g. [['a','b','a','c'], ['a','b','c','d']] -> {a:2, b:2, c:2, d:1}

i.e. a,b and c occur in both lists but d only occurs in one list.


Solution

  • Using generator expression with 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})
    

    Responding to the comment, Without generator expression:

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