5.3.5 Diccionarios por comprensión
Nivel intermedio
De forma análoga a cómo se escriben las listas por comprensión, podemos aplicar este método a los diccionarios usando llaves { }.
Veamos un ejemplo en el que creamos un diccionario por comprensión donde las claves son palabras y los valores son sus longitudes:
También podemos aplicar condiciones a estas comprensiones. Continuando con el ejemplo anterior, podemos incorporar la restricción de sólo incluir palabras que no empiecen por vocal:
Ejercicio
Tenemos almacenadas las notas de un examen en un diccionario. Es necesario separar al alumnado que aprobó y al que suspendió en dos diccionarios. Igualmente habrá que pasar a mayúsculas el nombre del alumnado que aprobó y a minúsculas el nombre del alumnado que suspendió. Escriba un programa en Python que realice esta operación usando diccionarios por comprensión.
Ejemplo
- Entrada: {‘John’: 4, ’Marc’: 7, ’Meryl’: 2, ‘Anthony’: 8, ’Carol’: 3, ‘Andreas’: 3, ’Sarah’: 6}
- Salida:
Nivel avanzado
La única restricción que deben cumplir las claves de un diccionario es ser «hashables»[1]. Un objeto es «hashable» si se le puede asignar un valor «hash» que no cambia en ejecución durante toda su vida.
Para encontrar el «hash» de un objeto, Python usa la función hash(), que devuelve un número entero y es utilizado para indexar la tabla «hash» que se mantiene internamente:
Para que un objeto sea «hashable», debe ser inmutable:
La función «built-in» hash() realmente hace una llamada al método mágico________ hash__ () del objeto en cuestión:
EJERCICIOS DE REPASO
- Escriba un programa en Python que acepte una lista de palabras y las agrupe por su l
- Entrada: [ ‘mesa’, ‘móvil’, ‘barco’, ‘coche’, ‘avión’, ‘bandeja’, ‘casa’, ‘monitor’, ‘carretera’, ‘arco’]
- Salida: {‘m’: [‘mesa’, ‘móvil’, ‘monitor’], ’b’: [‘barco’, ‘bandeja’], ’c’: [‘coche’, ‘casa’, ‘carretera’], ’a’: [‘avión’, ‘arco’]}
- Escriba un programa en Python que acepte un diccionario y determine si todos los val
- Entrada: {‘Juan’: 5, ‘Antonio’: 5, ’Inma’: 5, ‘Ana’: 5, ‘Esteban’: 5}
- Salida: Same values
- Escriba un programa en Python que acepte una lista de listas con varios elementos y c
- Entrada: [[‘Episode IV – A New Hope’, ‘May 25’, 1977], [’Episode V – The Empire Strikes Back’, ‘May 21’, 1980], [’Episode VI – Return of the Jedi’, ‘May 25’, 1983]]
- Salida: {’Episode IV – A New Hope’: [‘May 25’, 1977], ’Episode V – The Empire Strikes Back’: [‘May 21’, 1980], ’Episode VI – Return of the Jedi’: [‘May 25’, 1983]}
- Escriba un programa en Python que acepte un diccionario cuyos valores son listas y b<
- Entrada: {‘C1’: [10, 20, 30], ‘C2′: [20, 30, 40], *03’: [12, 34]}
- Salida: {‘C1′: [], ’C2’: [], ‘C3’: []}
- Escriba un programa en Python que acepte un diccionario y elimine los espacios de su
- Entrada: {’S 001’: [’Math’, ‘Science’], ’S 002’: [’Math’,’English’]}
- Salida: {‘S001’: [’Math’, ‘Science’], ‘S002’: [’Math’, ’English’]}
AMPLIAR CONOCIMIENTOS
- Using the Python defaultdict Type for Handling Missing Keys
- Python Dictionary Iteration: Advanced Tips & Tricks
- Python KeyError Exceptions and How to Handle Them
- Dictionaries in Python
- How to Iterate Through a Dictionary in Python
- Shallow vs Deep Copying of Python Objects
Un conjunto en Python representa una serie de valores únicos y sin orden establecido, con la única restricción de que sus elementos deben ser «hashables». Mantiene muchas similitudes con el concepto matemático de conjunto
Para crear un conjunto basta con separar sus valores por comas y rodearlos de llaves {}: >>> lottery = {21, 10, 46, 29, 31, 94}
La excepción la tenemos a la hora de crear un conjunto vacío, ya que, siguiendo la lógica de apartados anteriores, deberíamos hacerlo a través de llaves:
La única opción que tenemos es utilizar la función set():
Para convertir otros tipos de datos en un conjunto podemos usar la función set() sobre cualquier iterable:
Obtener un elemento
En un conjunto no existe un orden establecido para sus elementos, por lo tanto no podemos acceder a un elemento en concreto.
De este hecho se deriva igualmente que no podemos modificar un elemento existente, ya que ni siquiera tenemos acceso al mismo. Python sí nos permite añadir o borrar elementos de un conjunto.
Añadir un elemento
Para añadir un elemento a un conjunto debemos utilizar la función add(). Como ya hemos indicado, al no importar el orden dentro del conjunto, la inserción no establece a priori la posición donde se realizará.
A modo de ejemplo, vamos a partir de un conjunto que representa a los cuatro integrantes originales de The Beatles. Luego añadiremos a un nuevo componente:
Ejecución paso a paso a través de Python Tutor:
Ejercicio
Dada una tupla de duplas (2 valores), cree dos conjuntos:
- Uno de ellos con los primeros valores de cada dupla.
- El otro con los segundos valores de cada dupla.
Ejemplo
- Entrada: ((4, 3), (8, 2), (7, 5), (8, 2), (9, 1))
- Salida:
Borrar elementos
Para borrar un elemento de un conjunto podemos utilizar la función remove(). Siguiendo con el ejemplo anterior, vamos a borrar al último «beatle» añadido:
Longitud de un conjunto
Podemos conocer el número de elementos que tiene un conjunto con la función len():
Iterar sobre un conjunto
Tal y como hemos visto para otros tipos de datos iterables, la forma de recorrer los elementos de un conjunto es utilizar la sentencia for:
Consejo: Como en el ejemplo anterior, es muy común utilizar una variable en singular para recorrer un iterable (en plural). No es una regla fija ni sirve para todos los casos, pero sí suele ser una buena práctica.
Pertenencia de elemento
Al igual que con otros tipos de datos, Python nos ofrece el operador in para determinar si un elemento pertenece a un conjunto:
Vamos a partir de dos conjuntos A = {1,2} y B = {2, 3} para ejemplificar las distintas operaciones que se pueden hacer entre ellos basadas en los Diagramas de Venn y la Teoría de Conjuntos:
Figura 7: Diagramas de Venn
Intersección
A n B – Elementos que están a la vez en A y en B:
Unión
A U B – Elementos que están tanto en A como en B:
Diferencia
A — B – Elementos que están en A y no están en B:
Diferencia simétrica
A fl B – Elementos que están en A o en B pero no en ambos conjuntos:
Los conjuntos, al igual que las listas y los diccionarios, también se pueden crear por comprensión.
Veamos un ejemplo en el que construimos un conjunto por comprensión con los aquellos números enteros múltiplos de 3 en el rango [0, 20):
Ejercicio
Dadas dos cadenas de texto, obtenga una nueva cadena de texto con las letras consonantes que se repiten en ambas frases. Ignore los espacios en blanco y muestre la cadena de salida con sus letras ordenadas.
Resuelva el ejercicio mediante dos aproximaciones: Una de ellas usando conjuntos por comprensión y otra sin usar comprensiones.
Ejemplo
- Entrada: Flat is better than nested y Readability counts
- Salida: bdlnst
Python ofrece la posibilidad de crear conjuntos inmutables haciendo uso de la función frozenset() que recibe cualquier iterable como argumento.
Supongamos que recibimos una serie de calificaciones de exámenes y queremos crear un conjunto inmutable con los posibles niveles (categorías) de calificaciones:
Veamos qué ocurre si intentamos modificar este conjunto:
AMPLIAR CONOCIMIENTOS
- Sets in Python