.. _diccionarios: Diccionarios ============ Un Diccionario ("dict") es una estructura de datos versatil en Python, que permite almacenar cualquier tipo de valor; enteros, cadenas, listas e incluso otras funciones. Los valores almacenados son identificados a través de una clave ("Key") y que por condición esperable debiese ser única. Sintaxis .. code-block:: python diccionario = { key : 'value'} Ejemplo .. code-block:: python diccionario = {1: 'uno', 2: 'dos', 3: 'tres', 4: 'cuatro'} En el ejemplo denota que son las llaves ({}) las que se utilizan para definir un diccionario y en su interior y en primer lugar existe "key" (1) de tipo entero, con un "valor" asociado a 'uno' de tipo string. Definir un diccionario ---------------------- Para crear un diccionario se puede realizar de la siguiente manera .. code-block:: python persona = {} En caso de querer definir un diccionario con valores por defecto podemos utilizar la siguiente sintaxis: .. code-block:: python persona = {'nombre': 'Pepito', 'apellido': 'Perez', 'ciudad': 'Curicó' } print(persona) La salida esperada es .. code-block:: python {'nombre': 'Pepito', 'apellido': 'Perez', 'ciudad': 'Curicó'} Agrega una nueva key al diccionario ----------------------------------- Es posible agregar una key al diccionario ya definido realizando la siguiente declaración .. code-block:: python diccionario[key] = valor Ejemplo: .. code-block:: python persona['pais'] = 'Chile' print(persona) Se referencia la variable persona previamente definida y que es de tipo diccionario (persona). Entre corchetes se inserta el nombre de la key ("pais") y también se le asigna el valor que para el caso es el string de "Chile". La salida obtenida para el ejemplo realizado será .. code-block:: python {'nombre': 'Pepito', 'apellido': 'Perez', 'ciudad': 'Curicó', 'pais': 'Chile'} Acceder a los valores de un diccionario --------------------------------------- Para acceder a los valores dentro del diccionario existen dos maneras, usando el méotodo "get" o en su defecto usar corchetes. .. code-block:: python nombre = persona.get('nombre') print("El nombre de la persona es", nombre) .. code-block:: python nombre = persona['nombre'] print("El nombre de la persona es", nombre) Editar valores de una diccionario --------------------------------- Para editar el valor de un diccionario es prácticamente del mismo modo que la asignación, pues se reemplazará el valor de una key ya existente Un ejemplo básico para reemplazar el valor de la key "apellido" sería: .. code-block:: python persona['apellido'] = 'Pereira' print(persona) La salida esperada es: .. code-block:: python {'nombre': 'Pepito', 'apellido': 'Pereira', 'ciudad': 'Curicó', 'pais': 'Chile'} Eliminar valores de un diccionario ---------------------------------- Si se desea eliminar una clave, puede hacerlo con la instrucción del siguiendo la siguiente sintaxis .. code-block:: python del diccionario['key'] .. code-block:: python del persona['pais'] print(persona) Ahora el diccionario quedaría del siguiente modo: .. code-block:: python {'nombre': 'Pepito', 'apellido': 'Pereira', 'ciudad': 'Curicó'} Útiles sobre diccionarios ------------------------- Algunas recomendaciones sobre diccionarios: * Por definición, un diccionario no tiene orden explicito, por lo que la recomendación es siempre crear una rutina en caso de requerirlo: .. code-block:: python def ordena (dictionary): return "{" + ", ".join("%r: %r"%(key, dictionary[key]) for key in sorted (dictionary))+"}" dict = ordena(dict) print(dict) La salida es un diccionario ordenado por keys .. code-block:: python "{'apellido': 'Pereira', 'ciudad': 'Curicó', 'nombre': 'Pepito'}" * Para buscar una llave en el diccionario se deberá realizar del siguiente modo: .. code-block:: python if key in diccionario: acción a realizar Siguiendo con el ejemplo del diccionario persona esto sería para el caso de buscar la key de "nombre" .. code-block:: python if 'nombre' in persona : print(persona["persona"]) En este fragmento lo que realiza es preguntar si existe la key, en caso de ser verdadero se imprimirá su valor. Esta condición siempre retorna un "True" o "False", por lo que en caso de que no exista la key se omitirá dicha acción o se puede condicionar con un "sino". Un modo quizás más elegante de hacerlo es utilizando el método "get()", en donde en caso de existir la key a buscar retornará el valor de dicha key .. code-block:: python print(persona.get("nombre")) La salida de este script será el valor de Pepito. ¿Qué sucede si el valor no existe? la respuesta es que retornará un valor "None", por lo que se recomienda utilizar esto también dentro de una condición como en el siguiente ejemplo: .. code-block:: python if 'nombre' in persona: nombre = persona.get('nombre') print(nombre) Por último y otra forma de condicionar es accediendo mediante el método "get()", por ejemplo: .. code-block:: python print(persona.get('nombre', "no encontrado") print(persona.get('brenom', "no encontrado") En esto para el primer caso imprimirá el valor de la key nombre. Para el segundo caso como no existe la key "brenom", la salida sería el string "no encontrado". * Es posible obtener una lista de las claves utilizando el método "key()". Esto devolverá una lista completa de todas las claves dentro del diccionario. .. code-block:: python keys = personas.keys() Para este caso se han almacenados todas las keys del diccionario persona creado anteriormente y están en un tipo "dict_keys()", que puede ser tratado del mismo modo que una lista, por lo que es posible recorrerlo. Ejemplo: .. code-block:: python keys = personas.keys() # Imprime tipo de la varible key print(type(keys)) # Imprime contenido de key print(keys) # recorre lista de keys for i in keys: # imprime todas las keys print(i) La salida esperada por el script anterior sería en primer lugar el tipo de la variable key, en segundo lugar el contenido de la varible key y por último uno a uno las keys del diccionario persona. .. code-block:: text dict_keys(['nombre', 'apellido', 'ciudad']) nombre apellido ciudad * Obtener solo los valores del diccionario, esto se hace a través del método "values()" y devuelve una lista de elementos. .. code-block:: python values = personas.values() # Imprime tipo de la varible values print(type(values)) # Imprime contenido de values print(values) # recorre lista de valores for i in values: # imprime todos los valores print(i) La salida esperada por el script anterior sería en primer lugar el tipo de la variable values "values_dict", en segundo lugar el contenido y por último uno a uno los valores del diccionario persona. .. code-block:: text dict_values(['Pepito', 'Pereira', 'Curicó']) Pepito Pereira Curicó * Para iterar sobre las llaves y los valores simultáneamente, se usa el método "items()" .. code-block:: python for key, value in persona.items(): print ('La key {0} tiene como valor: {1}'.format(key, value)) Salida: .. code-block:: text La key nombre tiene como valor: Pepito La key apellido tiene como valor: Pereira La key ciudad tiene como valor: Curicó Diccionarios por comprensión ---------------------------- Los diccionario al igual que otras estructuras son elementos muy básicos y dinámicos, y por la forma en como se expresa Python se podría intuir sobre eso. Un ejemplo de lo dinámico es que Python permite a los programadores crear también un nuevo diccionario usando comprensiones, similar a la lista de comprensiones mencionadas anteriormente. Un ejemplo muy simple y clásico es aquél que asigna números en un rango de 0 a 99 a sus cuadrados: .. literalinclude:: ../examples/diccionarios/numerocuadrado.py