Python: Agregar y eliminar elementos de un diccionario

Objetivo: mostrar cómo agregar y eliminar elementos de un diccionario en Python.

En la anterior entrega explicamos el concepto de diccionario en Python y vimos el modo de crearlos. Hoy presentaremos dos técnicas básicas: la agregación y eliminación de elementos.

Comencemos con la creación de un par de diccionarios de ejemplo sobre los que practicaremos desde el intérprete interactivo:

>>> gazpacho = {}
>>> menda = {'Nombre':'Javier', 'Apellido':'Montero'}

El primero, gazpacho, es un simple diccionario vacío que utilizaremos para almacenar la receta del gazpacho; el otro, menda, recoge algunos datos sobre mi persona. Más adelante veremos que podemos crear estructuras de datos más complejas, basadas en los diccionarios, que podremos emplear para mantener una agenda de nuestros contactos personales y sin necesidad de recurrir a un gestor de bases de datos.

Para agregar un par clave-valor a un diccionario, recurrimos a la siguiente sintaxis:

diccionario[clave] = valor

Probémoslo con gazpacho:

>>> gazpacho['Aceite'] = '300 ml'

Verificamos que gazpacho, que antes estaba vacío, ahora contiene ese par:

>>> gazpacho
{'Aceite': '300 ml'}

Continuemos con la receta secreta:

>>> gazpacho['Vinagre'] = '100 ml'
>>> gazpacho['Pepino'] = 1
>>> gazpacho['Pimiento'] = 1

Veamos cómo evoluciona nuestra creación:

>>> gazpacho
{'Pimiento': 1, 'Aceite': '300 ml', 'Vinagre': '100 ml', 'Pepino': 1}

Observa la salida de esta última instrucción y recuerda lo que dijimos sobre el orden de los diccionarios: no son una estructura ordenada, aunque veremos formas de hacerlos más presentables si lo deseamos.

Añadamos nuevos elemendos al menda:

>>> menda['URL'] = 'http://www.elclubdelautodidacta.es'
>>> menda['Twitter'] = '@pradery'

tras lo cual,

>>> menda
{'URL': 'http://www.elclubdelautodidacta.es', 'Nombre': 'Javier', 'Twitter': '@pradery', 'Apellido': 'Montero'}

Las claves han de ser únicas. Si tratamos de agregar otra ya existente, simplemente el valor nuevo sustituirá al antiguo:

>>> gazpacho['Pimiento'] = 2
>>> menda['URL'] = 'http://elclubdelautodidacta.es/wp/'

Observa cómo los valores correspondientes son actualizados:

>>> gazpacho
{'Pimiento': 2, 'Aceite': '300 ml', 'Vinagre': '100 ml', 'Pepino': 1}
>>> menda
{'URL': 'http://elclubdelautodidacta.es/wp/', 'Nombre': 'Javier', 'Twitter': '@pradery', 'Apellido': 'Montero'}

Para borrar un par clave-valor de un diccionario disponemos de la sentencia del, que emplearemos del siguiente modo:

del diccionario[clave]

Por ejemplo:

>>> del gazpacho['Aceite']
>>> gazpacho
{'Pimiento': 2, 'Vinagre': '100 ml', 'Pepino': 1}

>>> del menda['URL']
>>> menda
{'Nombre': 'Javier', 'Twitter': '@pradery', 'Apellido': 'Montero'}

Con del podríamos cargarnos incluso el objeto completo:

>>> del gazpacho

A partir de este momento el gazpacho ha dejado de existir y ha pasado a mejor vida:

>>> gazpacho
Traceback (most recent call last):
  File "<pyshell#28>", line 1, in <module>
    gazpacho
NameError: name 'gazpacho' is not defined

Y con menda mejor no lo hago, no sea que traiga mala suerte…

Javier Montero Gabarró


Python: Agregar y eliminar elementos de un diccionario


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

Construcción de acordes – 18: Séptima con novena aumentada

Objetivo: construir el acorde de séptima con novena aumentada (#9) sobre cualquier fundamental.

Hace unos días presentamos el acorde de séptima con novena, una de las extensiones típicas del acorde de dominante:

7(9) --> 1 - 3 - 5 - b7 - 9

La peculiaridad de un acorde de séptima de dominante, en particular, el tritono que se forma entre la 3 y la b7, confiriéndole esa tensión característica que invita a ser resuelta, hace que sea un acorde que soporte casi cualquier alteración.

Unas de las alteraciones más típicas consiste en aumentar o disminuir un semitono la novena. En el artículo de hoy nos ocuparemos del primer caso.

Aumentar un semitono la novena, haciéndola, por lo tanto, aumentada, es algo que podría entrañar cierto riesgo armónico. Pese a que, en sentido estricto, la novena está una octava por encima de la segunda, lo cierto es que la segunda aumentada está justo a un semitono de la tercera. Soportar una distancia de semitono en la estructura es algo que muy pocos acordes privilegiados pueden hacer. La familia de acordes de séptima puede permitirse ese lujo.

Si modificamos la fórmula del acorde de arriba, aumentando la novena un semitono, tenemos la fórmula del acorde de hoy:

7(#9) --> 1 - 3 - 5 - b7 - #9

Veamos un par de ejemplos: C7(#9) y A7(#9)

Como siempre, comenzamos escribiendo la escala mayor sobre cada fundamental:

Do mayor –> C – D – E – F – G – A – B – C – D (prolongándola hasta la novena)

La mayor –> A – B – C# – D – E – F# – G# – A – B

Tomamos los grados indicados en la fórmula:

C7(#9) --> C - E - G - Bb - D#

A7(#9) --> A - C# - E - G - B#

Observa que he escrito B# para que estrictamente sea una novena. A efectos prácticos puedes referirte a la novena aumentada como el enarmónico Do, en lugar de Si sostenido.

Estúdiate bien este acorde, muy común en el jazz, la música brasileña, el funk y uno de los favoritos de Jimi Hendrix.

Recuerda que dispones de una tabla de referencia de construcción de acordes con todos los que han sido tratados hasta el momento en el blog.

Javier Montero Gabarró


Construcción de acordes – 18: Séptima con novena aumentada


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice de todos los artículos de armonía.

MySQL: Eliminación de datos en una tabla

Objetivo: presentar el comando que permite la eliminación de datos de una tabla en MySQL.

En las dos últimas entregas aprendimos los fundamentos para insertar datos en tablas MySQL mediante el comando INSERT. Pero, una vez creados, ¿cómo los eliminamos?, ¿cómo los modificamos? En el artículo de hoy daremos respuesta a la primera pregunta.

Recuperemos la tabla fichajes y observemos su contenido:

mysql> SELECT * FROM fichajes;
+------------+----------+----------+
| fecha      | entrada  | salida   |
+------------+----------+----------+
| 2012-07-01 | 07:32:00 | 17:14:00 |
| 2012-07-02 | 08:15:00 | 17:57:00 |
| 2012-07-03 | 07:31:00 | 16:30:00 |
| 2012-07-04 | 07:25:00 | NULL     |
| 2012-07-05 | 07:45:00 | NULL     |
| 2012-07-06 | 07:30:00 | NULL     |
| 2012-07-07 | 07:15:00 | NULL     |
| 2012-07-08 | 08:01:00 | NULL     |
+------------+----------+----------+
8 rows in set (0.00 sec)

Suponte que queremos eliminar el registro del día 7 de julio. MySQL pone a nuestra disposición el comando DELETE, que usaremos del siguiente modo:

DELETE FROM tabla WHERE condición

Algo que podríamos leer como «borra de la tabla indicada aquello que cumpla cierta condición».

¿Cuál es la condición que determinará que se borre el registro? Que el campo fecha tenga por valor ‘2012-07-07’. Así pues:

mysql> DELETE FROM fichajes WHERE fecha = '2012-07-07';
Query OK, 1 row affected (0.14 sec)

Constatemos que el comando ha cumplido su misión:

mysql> SELECT * FROM fichajes;
+------------+----------+----------+
| fecha      | entrada  | salida   |
+------------+----------+----------+
| 2012-07-01 | 07:32:00 | 17:14:00 |
| 2012-07-02 | 08:15:00 | 17:57:00 |
| 2012-07-03 | 07:31:00 | 16:30:00 |
| 2012-07-04 | 07:25:00 | NULL     |
| 2012-07-05 | 07:45:00 | NULL     |
| 2012-07-06 | 07:30:00 | NULL     |
| 2012-07-08 | 08:01:00 | NULL     |
+------------+----------+----------+
7 rows in set (0.00 sec)

Como puedes comprobar, el registro de fecha 7 de julio ha sido eliminado de la tabla.

Es necesario que extremes la precaución siempre que uses DELETE. Si la condición de la claúsula WHERE se cumple en varios registros, serán eliminados todos ellos.

Por eso, una buena práctica consiste en ejecutar previamente un comando SELECT, bajo los mismos términos, para obtener el listado de registros afectados.

Imagina, por ejemplo, que queremos eliminar de la tabla fichajes los registros cuya hora de entrada sea superior o igual a las 7:45. Antes de proceder con el comando DELETE es interesante asegurarnos de que los registros que se van a borrar son precisamente los que queremos:

mysql> SELECT * FROM fichajes WHERE entrada >= '07:45:00';
+------------+----------+----------+
| fecha      | entrada  | salida   |
+------------+----------+----------+
| 2012-07-02 | 08:15:00 | 17:57:00 |
| 2012-07-05 | 07:45:00 | NULL     |
| 2012-07-08 | 08:01:00 | NULL     |
+------------+----------+----------+
3 rows in set (0.00 sec)

Observa el uso de la claúsula WHERE también en la sentencia SELECT para filtrar las filas a presentar.

Comprobamos que, efectivamente, esos son los únicos registros que deseamos eliminar. Podemos lanzar ya DELETE sin miedo:

mysql> DELETE FROM fichajes WHERE entrada >= '07:45:00';
Query OK, 3 rows affected (0.03 sec)

Así es como queda nuestra tabla tras esta eliminación:

mysql> SELECT * FROM fichajes;
+------------+----------+----------+
| fecha      | entrada  | salida   |
+------------+----------+----------+
| 2012-07-01 | 07:32:00 | 17:14:00 |
| 2012-07-03 | 07:31:00 | 16:30:00 |
| 2012-07-04 | 07:25:00 | NULL     |
| 2012-07-06 | 07:30:00 | NULL     |
+------------+----------+----------+
4 rows in set (0.00 sec)

¿Y si quisiéramos eliminar todos los registros de la tabla fichajes?

Exactamente igual, con la salvedad de que sobra el WHERE, pues no hay nada que filtrar, ya que no se salvará ninguno:

mysql> DELETE FROM fichajes;
Query OK, 4 rows affected (0.04 sec)

Así de simple.

mysql> SELECT * FROM fichajes;
Empty set (0.01 sec)

Nada que presentar, la tabla está más pelada que el ropero de Tarzán.

Utilizaremos la claúsula WHERE condición en numerosos contextos. Considera el artículo de hoy como un pequeño barniz…

Javier Montero Gabarró


MySQL: Eliminación de datos en una tabla


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


¡Accede al índice con todos los artículos sobre MySQL!

Python: Introducción a los diccionarios

Objetivo: entender el concepto de diccionario en Python y aprender cómo se crean.

Tengo el placer de presentarte los diccionarios de Python, estructuras de datos fascinantes y tremendamente adictivas. Con frecuencia, cuando necesito resolver mediante programación alguna necesidad, me encuentro con que los diccionarios me vienen a la cabeza de un modo natural. Son objetos muy poderosos, como irás comprobando.

Ya sabes, en otro sentido, lo que es un diccionario, llevas toda tu vida manejándolos. Abre uno cualquiera por una página al azar y dime qué ves.

Un conjunto de términos y sus definiciones, no es más que eso. Un conjunto de claves (las palabras) y sus correspondientes valores (las definiciones).

Un diccionario en Python es, en esencia, lo mismo: una colección de pares formados por claves y definiciones.

Las claves no tienen que ser, necesariamente, palabras: puede servir cualquier tipo que sea inmutable, como los números o los strings. O incluso estructuras más complejas como las tuplas (que ya sabes que son inmutables, en oposición a las listas), pero con la condición de que los elementos que las componen sean también inmutables (por ejemplo, que dentro de una tupla no exista una lista). Más adelante comprenderemos el porqué de estas «manías» que tienen las claves de los diccionarios. Los valores, en cambio, no tienen estas restricciones y pueden ser de cualquier tipo.

Hay un concepto que diferencia a los diccionarios Python de los de papel de toda la vida. En estos, las palabras (claves) están ordenadas alfabéticamente, de la a a la z. Sin embargo, aunque muchas veces nos dará la sensación de lo contrario, no hay ordenación implícita en los elementos de un diccionario en Python. Veremos que existen métodos que nos permitirán, si lo necesitamos, poner orden en ese caos, pero hazte a la idea de que los diccionarios no son estructuras ordenadas. Si te gustaba la analogía con el diccionario de papel, imagínala como si hubieras recortado todos los pares término-definición y los hubieras metido en un saco, perdiendo así su orden natural.

Pongámonos manos a la obra ya. Vamos a crear un diccionario sencillo que nos sirva para asociar a cada uno de nuestros amigos con su fecha de cumpleaños. Por ejemplo:

'Marta': '25 de abril'
'José Luis' : '5 de diciembre'

En este ejemplo, todas las claves y los valores son de tipo string, por eso los he incluido entre comillas (da igual que sean simples o dobles), pero no tendría por qué haber sido así. Nada nos impediría, tampoco, introducir un par clave-valor así:

456 : '14 de mayo'

Es decir, ni las claves ni los valores tienen por qué mantener homogeneidad en sus tipos. Naturalmente, no tendría sentido en nuestro problema particular, pero sería un par válido.

Fíjate cómo hemos separado las claves de los valores empleando dos puntos.

Para crear el diccionario, separamos cada par mediante comas y rodeamos todo el conjunto entre llaves:

>>> cumpleaños = {'Marta': '25 de abril', 'José Luis' : '5 de diciembre'}

Comprobemos el tipo de este objeto:

>>> type(cumpleaños)
<class 'dict'>

Y su valor:

>>> cumpleaños
{'Marta': '25 de abril', 'José Luis': '5 de diciembre'}

Una regla de oro que cumplen los diccionarios es que las claves han de ser únicas. Si tratas de agregar un elemento con la misma clave que otro ya existente, simplemente el valor nuevo sobreescribirá al antiguo.

Para crear un diccionario vacío procedemos del siguiente modo:

>>> dicci = {}   # Un simple par de llaves sin nada dentro
>>> type(dicci)
<class 'dict'>

Ya sabemos crear diccionarios, vacíos o con pares clave-valor dentro. Próximamente aprenderemos a agregar o eliminar datos de estas estructuras ya creadas.

Javier Montero Gabarró


Python: Introducción a los diccionarios


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies