Introducción
El diccionario es un tipo de mapeo incorporado en Python. Los diccionarios mapean claves a valores y estos pares clave-valor proporcionan una forma útil de almacenar datos en Python.
Normalmente se utilizan para mantener datos relacionados, como la información contenida en un ID o un perfil de usuario, los diccionarios se construyen con llaves en ambos lados {
}
.
Información: Para seguir los ejemplos de código en este tutorial, abre una shell interactiva de Python en tu sistema local ejecutando el comando python3
. Luego puedes copiar, pegar o editar los ejemplos añadiéndolos después del indicador >>>
.
A dictionary looks like this:
Además de las llaves, también hay dos puntos (:
) en todo el diccionario.
Las palabras a la izquierda de los dos puntos son las claves. Las claves pueden estar compuestas por cualquier tipo de datos inmutable. Las claves en el diccionario anterior son:
'nombredeusuario'
'enlinea'
'seguidores'
Cada una de las claves en el ejemplo anterior son valores de cadena.
Las palabras a la derecha de los dos puntos son los valores. Los valores pueden estar compuestos por cualquier tipo de datos. Los valores en el diccionario anterior son:
'sammy-shark'
Verdadero
987
Cada uno de estos valores es una cadena, un booleano o un entero.
Vamos a imprimir el diccionario sammy
:
Output{'username': 'sammy-shark', 'followers': 987, 'online': True}
Al observar la salida, el orden de los pares clave-valor puede haber cambiado. En Python versión 3.5 y anteriores, el tipo de dato diccionario no está ordenado. Sin embargo, en Python versión 3.6 y posteriores, el tipo de dato diccionario sigue estando ordenado. Independientemente de si el diccionario está ordenado o no, los pares clave-valor permanecerán intactos, lo que nos permite acceder a los datos en función de su significado relacional.
Prerrequisitos
Deberías tener Python 3 instalado y un entorno de programación configurado en tu computadora o servidor. Si no tienes configurado un entorno de programación, puedes consultar las guías de instalación y configuración para un entorno de programación local o para un entorno de programación en tu servidor adecuado para tu sistema operativo (Ubuntu, CentOS, Debian, etc.).
Accediendo a los Elementos del Diccionario
Podemos llamar a los valores de un diccionario haciendo referencia a las claves relacionadas.
Accediendo a los Elementos de Datos con Claves
Debido a que los diccionarios ofrecen pares clave-valor para almacenar datos, pueden ser elementos importantes en tu programa de Python.
Si queremos aislar el nombre de usuario de Sammy, podemos hacerlo llamando a sammy['username']
. Vamos a imprimir eso:
Outputsammy-shark
Los diccionarios se comportan como una base de datos en el sentido de que, en lugar de llamar a un entero para obtener un valor de índice particular como lo harías con una lista, asignas un valor a una clave y puedes llamar a esa clave para obtener su valor relacionado.
Al invocar la clave 'username'
recibimos el valor de esa clave, que es 'sammy-shark'
.
Los valores restantes en el diccionario sammy
pueden ser llamados de manera similar utilizando el mismo formato:
Al hacer uso de los pares clave-valor de los diccionarios, podemos hacer referencia a las claves para recuperar los valores.
Usando Métodos para Acceder a Elementos
Además de usar claves para acceder a valores, también podemos trabajar con algunos métodos integrados:
dict.keys()
aisla las clavesdict.values()
aisla los valoresdict.items()
devuelve elementos en un formato de lista de pares de tuplas(clave, valor)
Para devolver las claves, usaríamos el método dict.keys()
. En nuestro ejemplo, eso usaría el nombre de la variable y sería sammy.keys()
. Pasemos eso a un método print()
y veamos la salida:
Outputdict_keys(['followers', 'username', 'online'])
Recibimos una salida que coloca las claves dentro de un objeto de vista iterable de la clase dict_keys
. Luego, las claves se imprimen en un formato de lista.
Este método se puede usar para consultar en diccionarios. Por ejemplo, podemos echar un vistazo a las claves comunes compartidas entre dos estructuras de datos de diccionario:
El diccionario sammy
y el diccionario jesse
son cada uno un diccionario de perfil de usuario.
Sus perfiles tienen claves diferentes, sin embargo, porque Sammy tiene un perfil social con seguidores asociados, y Jesse tiene un perfil de juegos con puntos asociados. Las 2 claves que tienen en común son username
y el estado online
, que podemos encontrar cuando ejecutamos este pequeño programa:
Outputsammy-shark JOctopus
True False
Podríamos ciertamente mejorar el programa para hacer que la salida sea más legible para el usuario, pero esto ilustra que dict.keys()
se puede usar para verificar en varios diccionarios qué comparten en común o no. Esto es especialmente útil para diccionarios grandes.
De manera similar, podemos usar el método dict.values()
para consultar los valores en el diccionario sammy
, que se construiría como sammy.values()
. Vamos a imprimir esos valores:
Outputdict_values([True, 'sammy-shark', 987])
Ambos métodos keys()
y values()
devuelven listas no ordenadas de las claves y valores presentes en el diccionario sammy
con los objetos de vista de dict_keys
y dict_values
respectivamente.
Si estamos interesados en todos los elementos de un diccionario, podemos acceder a ellos con el método items()
:
Outputdict_items([('online', True), ('username', 'sammy-shark'), ('followers', 987)])
El formato devuelto de esto es una lista compuesta de pares de tuplas (clave, valor)
con el objeto de vista dict_items
.
Podemos iterar sobre el formato de lista devuelto con un bucle for
. Por ejemplo, podemos imprimir cada una de las claves y valores de un diccionario dado, y luego hacerlo más legible para los humanos agregando una cadena:
Outputonline is the key for the value True
followers is the key for the value 987
username is the key for the value sammy-shark
El bucle for
anterior iteró sobre los elementos dentro del diccionario sammy
e imprimió las claves y valores línea por línea, con información para hacerlo más fácil de entender para los humanos.
Podemos usar métodos integrados para acceder a elementos, valores y claves de estructuras de datos de diccionario.
Modificación de Diccionarios
Los diccionarios son una estructura de datos mutable, por lo que puedes modificarlos. En esta sección, veremos cómo agregar y eliminar elementos de diccionarios.
Agregando y Cambiando Elementos de un Diccionario
Sin usar un método o función, puedes agregar pares clave-valor a diccionarios utilizando la siguiente sintaxis:
Vamos a ver cómo funciona esto en la práctica agregando un par clave-valor a un diccionario llamado usernames
:
Output{'Drew': 'squidly', 'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}
Ahora vemos que el diccionario ha sido actualizado con el par clave-valor 'Drew': 'squidly'
. Debido a que los diccionarios pueden ser desordenados, este par puede aparecer en cualquier lugar en la salida del diccionario. Si usamos el diccionario usernames
más adelante en nuestro archivo de programa, incluirá el par clave-valor adicional.
Además, esta sintaxis se puede usar para modificar el valor asignado a una clave. En este caso, haremos referencia a una clave existente y le asignaremos un valor diferente.
Consideremos un diccionario drew
que es uno de los usuarios en una red dada. Diremos que este usuario obtuvo un aumento en seguidores hoy, por lo que necesitamos actualizar el valor entero pasado a la clave 'followers'
. Usaremos la función print()
para verificar que el diccionario fue modificado.
Output{'username': 'squidly', 'followers': 342, 'online': True}
En la salida, vemos que el número de seguidores aumentó desde el valor entero de 305
a 342
.
Podemos usar este método para agregar pares clave-valor a diccionarios con entrada de usuario. Escribamos un programa rápido, usernames.py
, que se ejecute en la línea de comandos y permita la entrada del usuario para agregar más nombres y nombres de usuario asociados:
Ejecutemos el programa en la línea de comandos:
Cuando ejecutamos el programa, obtendremos algo como la siguiente salida:
OutputEnter a name:
Sammy
sammy-shark is the username of Sammy
Enter a name:
Jesse
I don't have Jesse's username, what is it?
JOctopus
Data updated.
Enter a name:
Cuando hayamos terminado de probar el programa, podemos presionar CTRL + C
para salir del programa. Puedes configurar un disparador para salir del programa (como escribir la letra q
) con una declaración condicional para mejorar el código.
Esto muestra cómo puedes modificar diccionarios de forma interactiva. Con este programa en particular, tan pronto como salgas del programa con CTRL + C
, perderás todos tus datos a menos que implementes una forma de manejar la lectura y escritura de archivos.
También podemos agregar y modificar diccionarios usando el método dict.update()
. Esto difiere del método append()
disponible en listas.
En el diccionario jesse
a continuación, agreguemos la clave 'followers'
y asignémosle un valor entero con jesse.update()
. Después de eso, imprimamos()
el diccionario actualizado.
Output{'followers': 481, 'username': 'JOctopus', 'points': 723, 'online': False}
A partir de la salida, podemos ver que hemos agregado con éxito el par clave-valor 'followers': 481
al diccionario jesse
.
También podemos usar el método dict.update()
para modificar un par clave-valor existente reemplazando un valor dado por una clave específica.
Vamos a cambiar el estado en línea de Sammy de True
a False
en el diccionario sammy
:
Output{'username': 'sammy-shark', 'followers': 987, 'online': False}
La línea sammy.update({'online': False})
hace referencia a la clave existente 'online'
y modifica su valor booleano de True
a False
. Cuando llamamos a print()
el diccionario, vemos que se realiza la actualización en la salida.
Para agregar elementos a diccionarios o modificar valores, podemos usar tanto la sintaxis dict[key] = value
como el método dict.update()
.
Eliminando Elementos del Diccionario
Así como se pueden agregar pares clave-valor y cambiar valores dentro del tipo de datos diccionario, también se pueden eliminar elementos dentro de un diccionario.
Para eliminar un par clave-valor de un diccionario, usaremos la siguiente sintaxis:
Vamos a tomar el diccionario jesse
que representa a uno de los usuarios. Diremos que Jesse ya no está utilizando la plataforma en línea para jugar juegos, así que eliminaremos el elemento asociado con la clave 'points'
. Luego, imprimiremos el diccionario para confirmar que se eliminó el elemento:
Output{'online': False, 'username': 'JOctopus', 'followers': 481}
La línea del jesse['points']
elimina el par clave-valor 'points': 723
del diccionario jesse
.
Si queremos vaciar un diccionario de todos sus valores, podemos hacerlo con el método dict.clear()
. Esto mantendrá un diccionario dado en caso de que necesitemos usarlo más tarde en el programa, pero ya no contendrá ningún elemento.
Vamos a eliminar todos los elementos dentro del diccionario jesse
:
Output{}
La salida muestra que ahora tenemos un diccionario vacío sin pares clave-valor.
Si ya no necesitamos un diccionario específico, podemos usar del
para deshacernos de él completamente:
Cuando ejecutamos una llamada a print()
después de eliminar el diccionario jesse
, recibiremos el siguiente error:
Output...
NameError: name 'jesse' is not defined
Como los diccionarios son tipos de datos mutables, se pueden agregar, modificar y eliminar elementos y limpiarlos.
Conclusión
Este tutorial pasó por la estructura de datos de diccionario en Python. Los diccionarios están compuestos por pares clave-valor y proporcionan una forma de almacenar datos sin depender de la indexación. Esto nos permite recuperar valores basados en su significado y relación con otros tipos de datos.
Desde aquí, puedes aprender más sobre otros tipos de datos en nuestro tutorial “Entendiendo los Tipos de Datos” (Understanding Data Types).
Puedes ver el tipo de datos diccionario usado en proyectos de programación como web scraping con Scrapy.
Source:
https://www.digitalocean.com/community/tutorials/understanding-dictionaries-in-python-3