Uso de defaultdict en Python
-
defaultdict
vsdict
en Python -
el
dictado por defecto
en Python -
Funciones útiles del
defaultdict
en Python
El artículo de hoy analiza el contenedor defaultdict
y demuestra su uso mediante ejemplos de código.
defaultdict
vs dict
en Python
El defaultdict
es un contenedor como un diccionario que pertenece al módulo de colecciones. Es una subclase del diccionario; de ahí que tenga todas las funcionalidades de diccionario
. Sin embargo, el único propósito de defaultdict
es manejar el KeyError
.
# return true if the defaultdict is a subclass of dict (dictionary)
from collections import defaultdict
print(issubclass(defaultdict, dict))
Producción :
True
Digamos que un usuario busca una entrada en el diccionario
, y la entrada buscada no existe. Los diccionarios ordinarios generarán un KeyError
, lo que significa que la entrada no existe. Para superar este problema, los desarrolladores de Python presentaron el concepto de defaultdict
.
Ejemplo de código:
# normal dictionary
ord_dict = {"x": 3, "y": 4}
ord_dict["z"] # --> KeyError
Producción :
KeyError: 'z'
El diccionario ordinario no puede manejar “claves” desconocidas, y arroja KeyError
cuando buscamos una “clave” desconocida, como se demuestra en el código anterior.
Por otro lado, el módulo defaultdict
funciona de manera similar a los diccionarios de Python. Aún así, tiene funciones avanzadas, útiles y fáciles de usar y no arroja un error cuando un usuario busca una clave indefinida en el diccionario.
Pero en cambio, crea una entrada en el diccionario y devuelve un valor predeterminado contra la clave
. Para entender este concepto, veamos la parte práctica a continuación.
Ejemplo de código:
from collections import defaultdict
# the default value for the undefined key
def def_val():
return "The searched Key Not Present"
dic = defaultdict(def_val)
dic["x"] = 3
dic["y"] = 4
# search 'z' in the dictionary 'dic'
print(dic["z"]) # instead of a KeyError, it has returned the default value
print(dic.items())
Producción :
The searched Key Not Present
dict_items([('x', 3), ('y', 4), ('z', 'The searched Key Not Present')])
El defaultdict
crea cualquier elemento al que intentemos acceder con la clave, que no está definida en el diccionario.
Y crea un elemento predeterminado
de este tipo, llama al objeto de función que le pasamos al constructor de defaultdict
, y para ser más precisos, el objeto debe ser un objeto invocable
que incluya objetos de tipo y funciones.
En el ejemplo anterior, los elementos predeterminados se crean con la función def_val
que devuelve una cadena La clave buscada no está presente
contra la clave indefinida en el diccionario.
el dictado por defecto
en Python
El default_factory
es el primer argumento del constructor defaultdict
que utiliza el método __missing__()
, y si falta el argumento del constructor, default_factory
se inicializará como Ninguno
, lo que surgir el KeyError
.
Y si default_factory
se inicializa con algo que no sea “Ninguno”, se asignará como un “valor” a una “clave” buscada como se ve en el ejemplo anterior.
Funciones útiles del defaultdict
en Python
Hay toneladas de funciones de diccionario
y defaultdict
. Como sabemos, el dictador por defecto
tiene acceso a todas las funciones del diccionario
; sin embargo, estas son algunas de las funciones más útiles específicas de defaultdict
.
defaultdict.clear()
en Python
Ejemplo de código:
from collections import defaultdict
# the default value for the undefined key
def def_val():
return "Not Present"
dic = defaultdict(def_val)
dic["x"] = 3
dic["y"] = 4
print(f'Before clearing the dic, values of x = {dic["x"]} and y = {dic["y"]}')
dic.clear() # dic.clear() -> None. it will remove all items from dic.
print(f'After clearing the dic, values of x = {dic["x"]} and y = {dic["y"]}')
Producción :
Before clearing the dic, values of x = 3 and y = 4
After clearing the dic, values of x = Not Present and y = Not Present
Como vemos en el ejemplo anterior, tenemos dos pares de datos en el diccionario dic
donde x=3
e y=4
. Sin embargo, después de usar la función clear()
, los datos se eliminaron y los valores de x
e y
ya no existen, y es por eso que estamos obteniendo Not present
contra x
e y
.
defaultdict.copy()
en Python
Ejemplo de código:
from collections import defaultdict
# the default value for the undefined key
def def_val():
return "Not Present"
dic = defaultdict(def_val)
dic["x"] = 3
dic["y"] = 4
dic_copy = dic.copy() # dic.copy will give you a shallow copy of dic.
print(f"dic = {dic.items()}")
print(f"dic_copy = {dic_copy.items()}")
Producción :
dic = dict_items([('x', 3), ('y', 4)])
dic_copy = dict_items([('x', 3), ('y', 4)])
La función defaultdict.copy()
se usa para copiar una copia superficial del diccionario en otra variable que podemos usar en consecuencia.
defaultdict.default_factory()
en Python
Ejemplo de código:
from collections import defaultdict
# the default value for the undefined key
def def_val():
return "Not present"
dic = defaultdict(def_val)
dic["x"] = 3
dic["y"] = 4
print(f"The value of z = {dic['Z']}")
print(
dic.default_factory()
) # default_factory returns the default value for defaultdict.
Producción :
The value of z = Not present
Not present
La función default_factory()
se utiliza para proporcionar valores predeterminados a los atributos de una clase definida y, en general, los valores de default_factory
son los valores devueltos por una función.
defaultdict.get(clave, valor predeterminado)
en Python
Ejemplo de código:
from collections import defaultdict
# the default value for the undefined key
def def_val():
return "Not present"
dic = defaultdict(def_val)
dic["x"] = 3
dic["y"] = 4
# search the value of Z in the dictionary dic; if it exists, return the value; otherwise, display the message
print(dic.get("Z", "Value doesn't exist")) # default value is None
Producción :
Value doesn't exist
La función defaultdict.get()
toma dos argumentos, primero es la clave, y el segundo es el valor predeterminado contra la clave en caso de que el valor no exista.
Pero el segundo argumento es opcional. Entonces podemos especificar cualquier mensaje o valor; de lo contrario, mostrará Ninguno
como valor predeterminado.
Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn