collections.Counter()

Counter() è una sottoclasse di dict() contenuta nel modulo collections.
Fornisce un modo semplice per associare un contatore (un intero) a ogni chiave.
Inoltre le chiavi sono ordinate rispetto al contatore.

Costruttori

collections.Counter() Crea un contatore vuoto
collections.Counter("arcobaleno") Crea un contatore con le lettere di una stringa
collections.Counter(['red', 'green', 'red']) Crea un contatore con una lista di stringhe
collections.Counter(red=100, green=150, blue=255) Crea un contatore con assegnazione dei valori alle chiavi
collections.Counter(['red', 100), ('green', 150), ('blue', 255)]) Crea un contatore con una lista di coppie
collections.Counter({'red': 100, 'green': 150, 'blue': 255}) Crea un contatore con i dati un dizionario
...

Operatori

  1. x=c[‘red’], restituisce il contatore
  2. c[‘red’]=0, imposta il contatore
  3. del c[‘red’], elimina la chiave (e il contatore)

Funzioni / Metodi

L’oggetto Counter() può essere manipolato come un dict(), perché eredita i metodi di dict(), ma possiede nuovi metodi

c.clear() Elimina tutto il contenuto
c.copy() Crea una copia
c.elements() (Nuovo) Restituisce (come iteratore) gli elementi presenti ripetendoli (secondo il valore del contatore).
Se un contatore è minore di 1 l’elemento non verrà incluso.
c.get(k) Restituisce il valore corrispondente alla chiave k.
Se k non esiste restituisce None.
c.items() Restituisce la lista con le coppie [chiave, valore]
c.keys() Restituisce la lista delle chiavi
len(c) Restituisce il numero di elementi presenti
max(c) Restituisce la chiave più grande…
min(c) Restituisce la chiave più piccola…
c.most_common(n) (Nuovo) Restituisce una lista con le prime n coppie (con i contatori più alti).
Se n non è specificato, restituisce tutto.
c.pop(k) Restituisce il valore di k e elimina la coppia.
Se k non esiste provoca un errore.
c.pop(k, default) Restituisce il valore di k e elimina la coppia.
Se k non esiste restituisce il valore specificato.
c.popitem() Restituisce una coppia (chiave, valore) e la elimina.
c.setdefault(k) imposta il valore di k a None se non esiste, altrimenti rimane inalterato.
c.setdefault(k, default) Imposta il valore di k a default se non è presente.
c.subtract(z) (Nuovo) Aggiorna c sottraendo i valori presenti nella struttura z, si possono ottenere contatori negativi!
sum(c) Restituisce la somma delle chiavi (se è possibile)
c.total() Restituisce la somma dei contatori (Python 3.10)
c.update(z) (Nuovo) Aggiorna c aggiungendo i valori presenti nella struttura z.
Il metodo sovrascrive quello di dict() che invece sovrascrive i nuovi valori.
c.values() Restituisce la lista dei valori.
...

Prova

c=Counter()                                   # Counter()
c=Counter("arcobaleno")                       # Counter({'a': 2, 'o': 2, 'r': 1, 'c': 1, 'b': 1, 'l': 1, 'e': 1, 'n': 1})
c=Counter(['red', 'green', 'red'])            # Counter({'red': 2, 'green': 1}) 
c=Counter({'red': 1, 'green': 5, 'blue': 2})  # Counter({'green': 5, 'blue': 2, 'red': 1})

x=len(c)  # x=3
x=max(c)  # x='red'
x=min(c)  # x='blue'

le=list(c.elements())  # ['red', 'green', 'green', 'green', 'green', 'green', 'blue', 'blue']
lm=c.most_common()     # [('green', 5), ('blue', 2), ('red', 1)]
lm=c.most_common(2)    # [('green', 5), ('blue', 2)]

...
...