Tema 7. Estructura de Datos. Diccionarios
Explicación del uso de estructuras de datos tipo diccionarios en Python 3.
Diccionario
La segunda estructura de datos que veremos son los diccionarios. Éstos son un conjunto de elementos no ordenados escritos entre llaves, {}, que constan de claves y valores.
Cada conjunto clave: valor es separado por comas. Las claves funcionan como identificadores y preceden a :. A continuación van los valores, que son elementos (numéricos, booleanos, strings, listas, diccionarios...) asociados a esa clave.
Los diccionarios, al igual que las listas, son:
heterogéneos: los elementos pueden ser de distinto tipo en un mismo diccionario
mutables: los elementos pueden ser modificados
Un ejemplo de diccionario sería
dicc = {"Jose": 32, "Marina": 21}
print(dicc)
#RESPUESTA
{'Jose': 32, 'Marina': 21}¡Cuidado! En Python, las claves de un diccionario deben ser únicas. Esto es, no puede haber dos claves que sean exactamente iguales. Si se da que hay dos claves iguales, entonces Python se queda con el último valor asociado a dicha clave.
dicc = {"Jose": 32,
"Marina": 21,
"Jose": 23}
print(dicc)
#RESPUESTA
{'Jose': 23, 'Marina': 21}Observación. Al decir que los diccionarios no tienen orden, lo que ocurre es que Python no mantendrá el que hemos introducido, tal y como hacía con las listas, sino que reordenará todos los elementos por orden primero numérico (yendo antes los positivos que los negativos) y luego alfabético de las claves. Esto no ocurre si usamos la función print().
Elementos de un diccionario
Anteriormente se ha comentado que los diccionarios no tienen orden. De modo que a sus elementos no se accede por posición, sino que debemos hacerlo mediante sus claves.
La sintaxis es diccionario[clave]
Podemos acceder a todas las claves de un diccionario con el método .keys()
También podemos acceder a todos los valores de un diccionario con el método .values()
Al ser una estructura mutable, podemos modificar los valores de los diccionarios
En el caso de la clave "ages" como dentro tenemos una lista, si que podemos acceder al segundo valor en orden.
También podríamos partir de un diccionario vacío e ir introduciéndole valores asociados a claves. De hecho, podemos hasta pedirle a un usuario que introduzca él los datos.
Observación. La función de casting str() impone que lo que sea que introduzcamos sea un dato de tipo string. Funciona exactamente del mismo modo que lo hacen las funciones int() y float() introducidas y utilizadas en temas anteriores.
EJERCICIO 1:
Vamos a hacer que el usuario rellene una ficha del cliente y vamos a guardar toda la información en un diccionario. Para ello, vamos a pedir el nombre, los apellidos, la edad, el dni y el dinero total que va a pagar el cliente.
Tamaño de un diccionario
Para saber cuántos elementos contiene un diccionario, podemos usar la función len()del siguiente modo:
Bucles y diccionarios
Para recorrer todo el diccionario, podemos hacer uso de un bucle for, pues el diccionario es una estructura iterable:
Otra forma de recorrer el diccionario sería obteniendo una lista de tuplas de la forma (clave, valor) para cada elemento de un diccionario, que construimos con el método .items(). Al ser una lista, sabemos que es iterable y podemos mostrar todas sus entradas haciendo uso de un bucle for.
Observación. Veremos las tuplas, que son otro tipo de Estructuras de datos en Python, en futuras secciones.
Para tener clave y valor por separado, podemos hacerlo del siguiente modo:
Diccionarios y listas
Como se ha mencionado antes, un diccionario puede contener listas u otros diccionarios. Por su parte, una lista también puede contener diccionarios:
EJERCICIO 2:
Tenemos un diccionario con 5 claves: Math, English, History, Science, IT. Cada clave contiene una lista de tamaño 3, donde cada una de esas entradas se corresponde con una nota de 0 a 10. El usuario va a ser quien introduzca esas notas por teclado. Finalmente, para cada clave, mostraremos la media de las 3 notas.
PISTA: Necesitarás la función sum().
Más métodos de diccionarios
El método .clear() elimina todos los elementos del diccionario dejándolo vacío.
El método .copy() devuelve una copia del diccionario original.
El método dict.fromkeys() recibe como parámetros un iterable y un valor y devuelve un diccionario que contiene como claves los elementos del iterable con el mismo valor ingresado.
Observación. Si el parámetro valor se deja en blanco, el método devolverá un diccionario con el valor None para todas las claves.
El método .get() recibe como parámetro una clave y devuelve el valor de dicha clave.
Observación. Si la clave no se encuentra en el diccionario, el método devuelve un objeto None.
El método .pop() recibe como parámetro una clave, la elimina y devuelve su valor.
Observación. Si la clave indicada por parámetro no se encuentra en el diccionario, el método devuelve error.
El método .setdefault() puede funcionar de dos formas:
Como el método
.get()Para agregar un nuevo elemento al diccionario.
El método .update() recibe como parámetro otro diccionario. En caso de tener claves iguales, actualiza el valor de la clave repetida. En caso de no haber claves iguales, el par clave: valor es agregado al diccionario al que es aplicado el método.
EJERCICIO 3:
Dado un diccionario, vamos a solicitar al usuario una clave que quiera eliminar y vamos a eliminarla. Al final, le mostraremos el diccionario actualizado.
Construyendo diccionarios con dict()
Para convertir un objeto iterable de Python a diccionario, hay que usar la función dict()
Aunque la función dict() también sirve para definir diccionarios directamente:
EJERCICIO 4:
Vamos a solicitar al usuario 8 números enteros del 0 al 9. Se supone que son los números de su DNI, que guardaremos cada uno en una entrada de una lista. A continuación, con esos números calcularemos la letra correspondiente y la guardaremos en una variable. Finalmente, crearemos un diccionario con dos claves, cada una guardará, respectivamente, los números y la letra del DNI. Finalmente, mostraremos el diccionario resultante.
EJERCICIO 5:
Vamos a leer un string por teclado y vamos a devolver un diccionario con la cantidad de apariciones de cada caracter en el string proporcionado por el usuario.
REPASO
Last updated