¿Qué son los diccionarios de Python?
Los diccionarios son estructuras de datos más complejas que las listas, tuplas o conjuntos, ya que están compuestos por pares de clave-valor que permiten almacenar información de forma más ordenada.
Espacio publicitario
Sintaxis de un diccionario
Aquí puedes ver la sintaxis de un diccionario:
{clave1: valor1, clave2: valor2, clave3: valor3, ...}
El diccionario se declara haciendo uso de unas llaves
({ }
) que envuelven todo el conjunto de
datos.
Lo que encontramos dentro, es una serie de pares clave-valor separados por comas.
Las claves deben ser únicas y de tipo inmutable (como cadenas de texto o números), mientras que los valores pueden ser de cualquier tipo y mutables. Además, si la clave tiene un tipo de dato concreto, el valor no tiene por qué ser el mismo.
Es posible tener tantos conjuntos clave-valor como queramos.
Un diccionario, en cierto modo, es como un conjunto de variables.
Claves y valores, se dice en inglés keys y values, respectivamente.
Aquí tienes una variable normal con un valor:
nombre = "Enrique"
Un par clave-valor de diccionario puede representar esto mismo de la siguiente forma:
"nombre" : "Enrique"
En este caso no se trata de una variable, por lo que hay
que seguir las normas de tipos de datos.
"nombre"
es una cadena, al igual que
"Enrique"
, y por eso debe ir entre comillas.
Fíjate bien, en que en el diccionario, las claves y
valores se asocian mediante los dos puntos
(:
), y no con un símbolo de asignación, como
ocurre con las variables.
En estos pares, el dato de la izquierda de los dos puntos, siempre es la clave, y el dato de la derecha, el valor:
clave : valor
Los datos que forman las claves, como puede ser
"nombre"
, pueden ser incluso usadas como
datos, y no se quedan en simples identificadores de
valores.
Con algunos ejemplos, verás lo fácil que es manejar todo esto.
Espacio publicitario
Crear un diccionario
Esta es la lista que he puesto en un ejemplo del capítulo de las listas:
camiseta = ["rojo", "L", 100, 10]
Esta lista describe y agrupa los atributos que tiene un
hipotético producto, como una camiseta, sin necesidad de
utilizar cuatro variables sueltas. Sin embargo, puede ser
algo confuso si no tenemos contexto sobre a qué
corresponde cada valor. Por ejemplo, ¿qué representa el
valor 100
? ¿Son las unidades en stock o es el
precio de la camiseta?
Aquí es donde entran en juego los diccionarios. Gracias a las claves, podemos aportar una descripción a los valores. Mira cómo se podría hacer:
camiseta = {
"color" : "rojo",
"talla" : "L",
"precio" : 100,
"unidades" : 10
}
Se entiende mucho más lo que es cada valor, ¿verdad?
Claves y valores
En el último ejemplo tenemos los siguientes elementos:
Claves del diccionario
"color"
(str
)"talla"
(str
)"precio"
(str
)"unidades"
(str
)
Valores del diccionario
"rojo"
(str
)"L"
(str
)100
(int
)10
(int
)
El tipo de dato de los diccionarios de Python, se llama
dict
.
El nombre de este tipo de dato (“dict”), proviene de dictionary, que significa diccionario en español.
Espacio publicitario
Llamar a valores de diccionario
Para hacer la llamada a una clave, la realizaremos con
unos corchetes ([]
).
En el siguiente ejemplo, llamo a la clave
"color"
, con la finalidad de obtener su valor
asociado:
camiseta = {
"color" : "rojo",
"talla" : "L",
"precio" : 100,
"unidades" : 10
}
# Obtiene el valor asociado a la clave "color"
dato_obtenido = camiseta["color"]
# Vemos el resultado
print(dato_obtenido)
rojo
Los diccionarios pueden ser grandes estructuras de datos con las que desarrollar muchas cosas en los programas, mediante la información contenida en ellos. En este punto ya puedes empezar a apreciar el potencial que tiene esta estructura para guardar datos.
Error por clave inexistente
Podemos recibir un error de tipo KeyError
, si
nos equivocamos al escribir el nombre de la clave, o esta
no existe.
En el siguiente print()
, estoy intentando
llamar al valor que tiene la clave
"material"
. Por supuesto, como esta clave no
existe, me lanza un error de clave inexistente:
camiseta = {
"color" : "rojo",
"talla" : "L",
"precio" : 100,
"unidades" : 10
}
print(camiseta["material"])
KeyError: 'material'
Error de clave: 'material'.
El error nos muestra que la clave es incorrecta, lo que indica que esa clave no está en el diccionario. En este ejemplo es evidente, ya que solo hay cuatro claves, pero puede haber casos en los que manejes diccionarios con miles de ellas. En esos casos, esta indicación del error será muy útil.
Espacio publicitario
Asignar nuevos valores a un diccionario
Es posible asignar valores nuevos asociados a las claves
de los diccionarios (reasignar). Para este propósito,
indicamos la clave, y con el operador de asignación
(=
), le damos un valor nuevo.
Por ejemplo, queremos modificar el stock de la camiseta.
Inicialmente, está en 10
unidades. Vamos a
especificar 25
unidades en stock, sin editar
el diccionario directamente:
camiseta = {
"color" : "rojo",
"talla" : "L",
"precio" : 100,
"unidades" : 10
}
# Comprobamos el stock
print(f"Hay {camiseta['unidades']} unidades en el almacén.")
# Se modifica el valor de "unidades"
camiseta['unidades'] = 25
# Comprobamos el stock de nuevo
print(f"Hay {camiseta['unidades']} unidades en el almacén.")
Hay 10 unidades en el almacén.
Hay 25 unidades en el almacén.
En el primer print()
aparece el valor
10
, que es el original. Después de la
reasignación, en el último print()
se
comprueba que el stock ha sido modificado con
25
unidades.
Crear claves y valores nuevos
Se pueden crear nuevos pares clave-valor para los diccionarios de Python. Tan solo debemos indicar una clave inexistente y un valor asociado a ella.
Si te equivocas asignando una clave inexistente, no te va a salir el error
KeyError
. Te va a crear una clave nueva con el valor asignado.
En el siguiente ejemplo, voy a crear un nuevo par
clave-valor para representar la marca de la camiseta. La
clave será "material"
:
camiseta = {
"color" : "rojo",
"talla" : "L",
"precio" : 100,
"unidades" : 10
}
# Se crea un nuevo par clave-valor en el diccionario
camiseta["material"] = "100% Algodón"
print(camiseta)
{'color': 'rojo', 'talla': 'L', 'precio': 100, 'unidades': 10, 'material': '100% Algodón'}
Espacio publicitario
Eliminar claves y valores en diccionarios
Es posible utilizar una de las palabras reservadas de Python, del, para poder eliminar una clave concreta de un diccionario. Por supuesto, si eliminas una clave, eliminarás también su valor asociado. Aquí tienes un ejemplo de uso:
camiseta = {
"color" : "rojo",
"talla" : "L",
"precio" : 100,
"unidades" : 10
}
# Se elimina una clave y su valor asociado
del camiseta["color"]
print(camiseta)
{'talla': 'L', 'precio': 100, 'unidades': 10}
La clave "color"
ha sido eliminada junto con
el valor que llevaba asociado.
Eliminar un diccionario entero
Para “eliminar” un diccionario entero, puedes utilizar la
palabra reservada del
. Solo tienes que
escribirla junto al nombre del diccionario:
del camiseta
He escrito “eliminar” entre comillas, por qué realmente no
se elimina el diccionario directamente con
del
. Se elimina la referencia al objeto en
memoria, y luego, el recolector de basura de Python lo
elimina automáticamente.
Este tema ya es algo más avanzado, y no es relevante en
este punto del curso, pero no quería darte un dato
incompleto sobre el funcionamiento de del
,
diciendo simplemente “elimina”.
Después de utilizar del para eliminar un diccionario, si lo intentas llamar, recibirás un error:
camiseta = {
"color" : "rojo",
"talla" : "L",
"precio" : 100,
"unidades" : 10
}
# Se elimina todo el diccionario
del camiseta
print(camiseta)
NameError: name 'camiseta' is not defined.
Error de nombre: el nombre 'camiseta' no está definido.
El error se produce, porque en la línea del
print()
ya no existe el diccionario.
del
es una palabra reservada de Python.
La palabra reservada del, proviene del término en inglés delete. Esto significa en español borrar o eliminar.
Espacio publicitario
Espacio publicitario
Ejercicios de Python para resolver
Para hacer los siguientes ejercicios, cuentas con los siguientes datos:
Clave | Valor |
---|---|
Nombre | Sandra |
Apellidos | Arenas Crespo |
Edad | 34 |
Dirección | C/Tropical n.º 45 |
En todo momento, deberás decidir qué tipos de datos utilizar.
47. Crea un diccionario con las claves y valores de la
tabla. Guarda el diccionario en una variable llamada
usuario
.
Este diccionario te servirá para hacer el resto de ejercicios de este capítulo.
He colocado todos estos datos como str
,
tanto las claves como los valores. Excepto el valor de
la clave "edad"
.
La edad podría ir dentro de una cadena, pero puede que en cierta aplicación, queramos tratar los datos de edad, de los diferentes usuarios, y realizar una serie de estadísticas con ellos. Depende del uso que le quieras dar a los datos.
usuario = {
"nombre" : "Sandra",
"apellidos" : "Arenas Crespo",
"edad" : 34,
"dirección" : "C/Tropical n.º 45"
}
print(usuario)
{'nombre': 'Sandra', 'apellidos': 'Arenas Crespo', 'edad': 34, 'dirección': 'C/Tropical n.º 45'}
48. Ahora, imprime en la consola el valor de nombre y apellidos. Deberás formar una frase igual que esta:
El nombre completo es Sandra Arenas Crespo.
Así es como lo he resuelto yo:
print(f"El nombre completo es {usuario["nombre"]} {usuario["apellidos"]}.")
El nombre completo es Sandra Arenas Crespo.
Fíjate en los tipos de comillas utilizados en la cadena. Al estar los valores incrustados en un f-string, no hay por qué alternar los tipos de comillas.
Una ventaja más de esta técnica, que me he reservado para explicártela en un caso concreto como este.
49. La dirección es incorrecta. Deberás cambiar el valor del número, ya que en realidad no es 45. Es “C/Tropical n.º 54”.
Primero, reasignamos el valor y luego lo comprobamos, para asegurarnos de que los cambios se han realizado correctamente.
usuario = {
"nombre" : "Sandra",
"apellidos" : "Arenas Crespo",
"edad" : 34,
"dirección" : "C/Tropical n.º 45"
}
# Reasignamos un valor mediante la clave
usuario["dirección"] = "C/Tropical n.º 54"
# Comprobamos si los cambios se hacen efectivos
print(usuario["dirección"])
C/Tropical n.º 54
Recuerda que he indicado, que aunque no te lo pida en algunos enunciados, es conveniente siempre comprobar los resultados con un simple
print()
.
50. Añade al diccionario el siguiente número de teléfono:
34-14782133599
El número de teléfono, aunque solo sea un número sin
guiones, debería estar siempre como tipo de dato
str
, ya que no es un elemento con el que
tengamos que hacer cálculos matemáticos.
# Creamos la clave inexistente con un valor
usuario["teléfono"] = "34-14782133599"
# Comprobamos si los cambios se hacen efectivos
print(usuario["teléfono"])
34-14782133599
La clave
"teléfono"
, al no ser un identificador de variable, no tiene ningún problema por contener un acento.
51. Elimina la clave "edad"
del diccionario.
En el resultado del print()
, al imprimir
todo el diccionario, vemos que la clave
"edad"
ya no existe. Esto gracias al uso
de la palabra del
.
# Elimina una clave con su valor
del usuario["edad"]
# Comprobamos que el diccionario no tiene la clave
print(usuario)
{'nombre': 'Sandra', 'apellidos': 'Arenas Crespo', 'dirección': 'C/Tropical n.º 45'}
52. Elimina el diccionario completo.
Eliminar el diccionario entero, es tan simple como hacer esto:
# Elimina una clave con su valor
del usuario
Si intentas imprimirlo en la consola, te dirá que el diccionario no está definido.
Espacio publicitario