collections.Counter în Python

Modulul collections Python 3.1+ (total: 3.10+)

Un dicționar specializat care numără de câte ori apare fiecare valoare.

Sintaxă
from collections import Counter
c = Counter(iterabil)
c.update(...), c.subtract(...), c.total(), c.elements()

Ce face collections.Counter

Counter(colectie) parcurge colecția și creează un dicționar {valoare: număr_de_apariții}. Pentru o cheie care lipsește returnează 0, nu KeyError. Cele mai frecvente valori se obțin cu most_common().

update() adună numărători noi, subtract() le scade (rezultatele pot deveni negative sau zero), total() (Python 3.10+) dă suma tuturor numărătorilor, iar elements() produce fiecare element de atâtea ori cât îi este numărul. copy() creează o copie. Counter.fromkeys() există doar moștenită și aruncă NotImplementedError.

Counter-ele se pot aduna (+), scădea (-, păstrează doar valorile pozitive), intersecta (&, minimul) și reuni (|, maximul).

Parametri

Parametru Descriere
iterabil / mapping / **kwds Elementele numărate, sau numărători date direct.

Ce returnează

Un obiect Counter (subclasă a lui dict).

Exemple

Exemplul 1: Numărarea cuvintelor

from collections import Counter
text = "ana are mere ana are pere și ana are prune"
c = Counter(text.split())
print(c)
print(c["ana"], c["banane"])
print(c.total(), len(c))

Rezultat

Counter({'ana': 3, 'are': 3, 'mere': 1, 'pere': 1, 'și': 1, 'prune': 1})
3 0
10 6

Exemplul 2: update, subtract și elements

from collections import Counter
stoc = Counter(mere=5, pere=2)
stoc.update({"mere": 3, "prune": 4})
stoc.subtract(pere=2, prune=1)
print(stoc)
print(sorted(stoc.elements())[:6])
copie = stoc.copy()
print(copie == stoc)
try:
    Counter.fromkeys("abc")
except NotImplementedError as e:
    print("fromkeys:", e)

Rezultat

Counter({'mere': 8, 'prune': 3, 'pere': 0})
['mere', 'mere', 'mere', 'mere', 'mere', 'mere']
True
fromkeys: Counter.fromkeys() is undefined.  Use Counter(iterable) instead.

Exemplul 3: Operații între Counter-e

from collections import Counter
a = Counter("aabbbc")
b = Counter("abccd")
print(a + b)
print(a - b)
print(a & b)
print(a | b)

Rezultat

Counter({'b': 4, 'a': 3, 'c': 3, 'd': 1})
Counter({'b': 2, 'a': 1})
Counter({'a': 1, 'b': 1, 'c': 1})
Counter({'b': 3, 'a': 2, 'c': 2, 'd': 1})

Greșeli frecvente

  • Te aștepți ca subtract() să șteargă cheile ajunse la zero. Ele rămân, cu valoarea 0 sau negativă; operatorul - le elimină.

Comenzi înrudite

  • Counter.most_common(): Returnează cele mai frecvente valori dintr-un Counter, în ordine descrescătoare.
  • dict.get(): Citește valoarea unei chei; dacă cheia lipsește, returnează o valoare implicită în loc de eroare.
  • collections.defaultdict: Un dicționar care creează automat o valoare implicită pentru cheile lipsă.
  • list.count() și tuple.count(): Numără de câte ori apare o valoare într-o listă sau într-un tuplu.