Per un dizionario delle liste, si consideri un defaultdict
.
A dizionario normale funziona correttamente, ma genera un errore se non viene trovata una chiave.
list1 = list("abcd")
list2 = [1, 2, 3, 4]
d = {"list1": list1, "list2": list2}
d["list3"]
# KeyError: 'list3'
Questo può essere di disturbo in alcune applicazioni e possono richiedere la gestione delle eccezioni supplementare.
I defaultdict
si comporta come un normale dict mentre l'aggiunta di una certa protezione contro gli errori.
import collections as ct
dd = ct.defaultdict(list)
dd.update(d)
dd
# defaultdict(list, {'list1': ['a', 'b', 'c', 'd'], 'list2': [1, 2, 3, 4]})
Aggiunta di una chiave mancante chiamerà la funzione di fabbrica, cioè list
. Qui invece di un errore, si ottiene un contenitore vuoto:
dd["list3"]
# []
Questo articolo è stato aggiunto con una lista vuota.
dd
# defaultdict(list,
# {'list1': ['a', 'b', 'c', 'd'],
# 'list2': [1, 2, 3, 4],
# 'list3': []})
Convertire un defaultdict
ad un dict regolare impostando la fabbrica di default per None
dd.default_factory = None
dd
# defaultdict(None, {'list1': ['a', 'b', 'c', 'd'], 'list2': [1, 2, 3, 4]})
oppure utilizzando il dict()
incorporato:
dict(dd)
# {'list1': ['a', 'b', 'c', 'd'], 'list2': [1, 2, 3, 4]}
È necessario utilizzare ricci, piuttosto che tra parentesi quadre , ma per il resto questo è probabilmente buono come si arriva. – NPE