I riferimenti alle parole sono un metodo vantaggioso per memorizzare le informazioni per il successivo recupero per nome (chiave). Le chiavi devono essere articoli unici nel loro genere, non modificabili, e sono stringhe ordinarie. Le qualità di un riferimento a una parola possono essere qualsiasi cosa. Per alcune applicazioni, le qualità sono di tipo semplice, ad esempio numeri interi e stringhe.

Diventa ancora più affascinante quando le qualità in una parola di riferimento sono accumulazioni (dischi, dettature, ecc.). Per questa situazione, il valore (un rundown o un dettato vacante) deve essere introdotto alla prima esecuzione attraverso una data chiave viene utilizzato. Mentre questo è generalmente semplice da fare fisicamente, il tipo di dettato meccanizza e migliora questo tipo di compiti.

Un defaultdict funziona esattamente come un tipico dettato, tuttavia, è installato con una capacità (“impianto di elaborazione di default”) che non prende contestazioni e dà al default un incentivo a una chiave inesistente.

Un’inadempienza non farà mai sorgere un KeyError. Qualsiasi chiave che non esiste riceve il valore restituito dall’impianto di produzione predefinito.

>>>> da collezioni importate inadempienti

>>> gelato = difettoso(lambda: ‘Vaniglia’)

>>> 

>>> gelato = difettoso(lambda: ‘Vaniglia’)

>>>> gelato[‘Sarah’] = “Chunky Monkey

>>>> gelato[‘Abdul’] = ‘Burro Pecan’.

>>>> stampa gelato[‘Sarah’]

Chunky Monkey

>>>> stampa gelato[‘Joe’]

Vaniglia

>>> 

Assicurarsi di passare l’articolo di capacità a defaultdict(). Cercate di non chiamare la capacità, per esempio defaultdict(func), non defaultd.ict(func()).

Nel modello di accompagnamento, per il conteggio viene utilizzato un difetto. L’impianto di produzione predefinito è int, che quindi ha una stima predefinita di zero. (Nota: “lambda: 0″ funzionerebbe anche in questa circostanza). Per ogni nutrimento nel rundown, il valore viene aumentato di uno dove la chiave è il nutrimento. Non dobbiamo assicurarci che il nutrimento sia da ora in poi una chiave – utilizzerà la stima di default di zero

>> da collezioni importate inadempienti

>>>> food_list = ‘spam spam spam spam spam spam spam uova spam spam’.split()

>>>> food_count = defaultdict(int) # il valore predefinito di int è 0

>>>> per il cibo in food_list:

… food_count[food] += 1 # valore dell’elemento incrementale di 1

defaultdict(<tipo ‘int’>, {‘uova’: 1, ‘spam’: 7})

>>> 

Nel prossimo esempio, iniziamo con un elenco di stati e città. Vogliamo costruire un dizionario dove le chiavi sono le abbreviazioni degli stati e i valori sono elenchi di tutte le città per quello stato. Per costruire questo dizionario di liste, usiamo un dizionario di default con una fabbrica predefinita di liste. Per ogni nuova chiave viene creata una nuova lista.

>>>> da collezioni importate inadempienti

>>> city_list = [(‘TX’, ‘Austin’), (‘TX’, ‘Houston’), (‘NY’, ‘Albany’), (‘NY’, ‘Syracuse’), (‘NY’, ‘Buffalo’), (‘NY’, ‘Rochester’), (‘TX’, ‘Dallas’), (‘CA’, ‘Sacramento’), (‘CA’, ‘Palo Alto’), (‘GA’, ‘Atlanta’)].

>>> 

>>> città_di_stato = difettodetto(elenco)

>>>> per stato, città nella lista delle città:

… città per stato[stato].append(città)

per stato, città in città per stato.iteritems():

… stato di stampa, ‘, ‘, ‘.join(città)

NY Albany, Siracusa, Buffalo, Rochester

CA Sacramento, Palo Alto

GA Atlanta

TX Austin, Houston, Dallas