Anuncios

Bienvenidos sean a este post, hoy veremos uno de los tipos de mapeo mas interesantes porque tambien es la columna vertebral de los objetos en el lenguaje.

Anuncios

Un diccionario o dictionary como vimos en un post nos permite mapear una clave a un valor, y como dijimos en el post anterior necesitamos que las claves sean objetos “hashables” y los valores pueden ser de cualquier tipo, estos tambien son de tipo mutable por lo tanto podemos manipular despues de creadas, veamos las distintas formas de crear un diccionario:

>>> a = dict(A='El', B='Tinchicus')
>>> b = {'A': 'El', 'B': 'Tinchicus'}
>>> c = dict(zip(['A', 'B'], ['El','Tinchicus']))
>>> d = dict([('A', 'El'), ('B','Tinchicus')])
>>> e = dict({'B': 'Tinchicus', 'A': 'El'})
>>>
Anuncios

En casi todos los casos usamos a la funcion dict, salvo cuando usamos las llaves pero en todos tenemos un mismo patron, tenemos el identificador de la clave seguido por dos puntos o un igual y luego ira el valor que asociaremos a dicha clave, si utilizamos el igual no es necesario usar comillas para la clave, inclusive en el ultimo caso vemos que no debemos respetar ningun orden sino solamente que el valor quede asociado con la clave, en el ejemplo anterior vimos a la funcion zip la cual nos permite emparejar claves con valores, veamos dos ejemplos practicos:

>>> list(zip(['h','o','l','a'],[1, 2, 3, 4]))
[('h', 1), ('o', 2), ('l', 3), ('a', 4)]
>>> list(zip('hola',range(1,5)))
[('h', 1), ('o', 2), ('l', 3), ('a', 4)]
>>>
Anuncios

En el primer caso vemos cada una de las claves y los valores que asociaremos por medio de zip, lo cual es correcto y vemos como funciona correctamente pero el segundo ejemplo vemos lo mismo que antes pero esta vez usamos todas las claves juntas y despues por medio de range pasaremos los mismos valores que en el primer ejemplo, si ven la salida es exactamente la misma pero de un forma mas “pythonica”, vamos a trabajar con un diccionario y lo mas tipico, primero vamos a crear un diccionario vacio:

>>> d = {}
Anuncios

Ahora vamos a agregar unos datos:

>>> d['a'] = 'El'
>>> d['b'] = 'Tinchicus'
>>> d['c'] = 2021
>>>
Anuncios

Como pueden observar agregamos tres datos, las tres claves son del mismo tipo pero los valores no lo son, si lo chequeamos lo veremos de la siguiente manera:

>>> d
{'a': 'El', 'b': 'Tinchicus', 'c': 2021}
>>>
Anuncios

Vamos a ponerlo en practica con lo visto en el formateo de cadenas:

>>> f"{d['a']} blog de {d['b']} es el mejor en {d['c']}"
'El blog de Tinchicus es el mejor en 2021'
>>>
Anuncios

Si observan asigno los valores que almacenamos anteriormente, esta es una de las tantas utilidades de los tipos de mapeo, vamos a ver algunas funciones para manejar la informacion del diccionario:

>>> del d['a']
>>> d
{'b': 'Tinchicus', 'c': 2021}
>>>
Anuncios

La primera que veremos es del la cual se encarga de eliminar la clave que le informemos, en este caso le pasamos que elimine la clave ‘a’, si lo chequeamos veremos que desaparecio de la misma, vamos a utilizar in para hacer varios chequeos:

>>> 'c' in d
True
>>> 2021 in d
False
>>>
Anuncios

Si le pedimos chequear claves y estas existen nos devolvera un True pero si lo intentamos con los valores siempre nos devolvera False porque no chequea valores, por ultimo tenemos la funcion que como siempre se usa para limpiar todos los elementos:

>>> d.clear()
>>> d
{}
>>>
Anuncios

Vamos a generar un nuevo ejemplo para ver otras funciones interesantes, primero creamos el nuevo diccionario:

>>> d = dict(zip('tinchicus',range(9)))
Anuncios

Veamos como quedo nuestro diccionario:

>>> d
{'t': 0, 'i': 5, 'n': 2, 'c': 6, 'h': 4, 'u': 7, 's': 8}
>>>
Anuncios

Si observan no formamos la palabra tinchicus sino que faltan una i y una c, a parte valores no ordenados, esto es debido a lo que mencionamos cuando hablamos de listas, no se pueden repetir valores, en este caso claves, por lo tanto al repetir la clave se le asigna el valor nuevo pero no se repite, veamos la primera funcion:

>>> d.keys()
dict_keys(['t', 'i', 'n', 'c', 'h', 'u', 's'])
>>>
Anuncios

La funcion keys nos devolvera solamente las claves que posee el diccionario, veamos la siguiente funcion:

>>> d.values()
dict_values([0, 5, 2, 6, 4, 7, 8])
>>>
Anuncios

La funcion values trabaja de la misma forma a la anterior pero ahora solo veremos los valores que poseemos, ya veremos para que nos puede ser util, veamos la siguiente funcion:

>>> d.items()
dict_items([('t', 0), ('i', 5), ('n', 2), ('c', 6), ('h', 4), ('u', 7), ('s', 8)])
>>>
Anuncios

En este caso nos devolvera todos los objetos que posee el diccionario, es decir la clave y el valor asociado, ahora pasaremos a ver como nos pueden ser utiles, recuerdan cuando anteriormente dijimos que al usar in no podiamos ver si un valor informado existe, en realidad si se puede pero debemos hacer la siguiente modificacion:

>>> 6 in d.values()
True
>>>
Anuncios

Si agregamos la funcion values ahora le diremos que verifique entre los valores que existen en el diccionario y por ende nos devolvio un True porque este valor existe, esto tambien podemos hacerlo con la funcion items, veamos un ejemplo:

>>> ('t', 0) in d.items()
True
>>>
Anuncios

Como pueden observar debemos pasarlo exactamente igual de lo contrario si devolvera un False pero podemos decir como conclusion de que si no informamos ninguna de estas dos funciones al usar el in en un diccionario utiliza de manera predeterminada la funcion keys, veamos otras formas de remover un elemento del diccionario:

>>> d.popitem()
('s', 8)
>>>
Anuncios

Esta funcion removera un elemento al azar, es ideal para algoritmos, al igual que vimos anteriormente la remueve del objeto y nos lo muestra en pantalla, veamos la siguiente funcion:

>>> d.pop('h')
4
>>> 
Anuncios

La funcion removera un elemento en base a la clave informada y nos lo mostrara en pantalla pero que sucede si intentamos eliminar una clave que no existe? veamos:

>>> d.pop('lala')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'lala'
>>>
Anuncios

Obviamente nos devolvio un error pero podemos dar una “solucion” para evitar este error, para ello haremos lo siguiente:

>>> d.pop('lala','un valor X')
'un valor X'
>>>
Anuncios

En este caso le agregamos un valor predeterminado, por lo tanto al no encontrar una clave en lugar de generar un error utilizara el valor que le pasamos y nos devolvera dicho valor pero sabremos que dicha clave informada no existia en el diccionario, veamos como podemos actualizar valores en el diccionario:

>>> d.update({'otro':'valor'})
>>> d.update(h=13)
>>>
Anuncios

Para hacerlo debemos usar la funcion update y tenemos dos sintaxis validas, la primera donde informaremos la clave y el valor respectivamente y la otra es mediante la clave, el signo igual y el valor que asociaremos, si lo chequeamos veremos lo siguiente:

>>> d
{'t': 0, 'i': 5, 'n': 2, 'c': 6, 'u': 7, 'otro': 'valor', 'h': 13}
>>>
Anuncios

Al comienzo vimos la forma mas basica para obtener la informacion de una clave pero tenemos otra forma:

>>> d.get('h')
13
>>>
Anuncios

Trabaja exactamente de la misma forma pero trabajando de esta forma evitamos una notificacion de error cuando no exista la clave que le pasemos, a diferencia de la forma basica, pero al igual que pop podemos usar valores predeterminados, veamos el siguiente ejemplo:

>>> d.get('h',236)
13
>>> d.get('a',236)
236
>>>
Anuncios

Para agregar un valor predeterminado simplemente lo ponemos detras de la clave, si la clave posee un valor omitira el valor que informamos y mostrara el que posee la clave, como en el primer caso, en cambio en el segundo caso al pasar una clave que no existe nos devolvera el valor predeterminado que informamos, la ultima funcion que veremos es setdefault:

>>> d = {}
>>> d.setdefault('a',1)
1
>>>
Anuncios

En este caso primero creamos un diccionario vacio, luego usamos a setdefault, le pasamos y la clave y el valor predeterminado, este a diferencia de get si no encuentra un valor para la clave no solamente la mostrara en pantalla sino que tambien la agrega, veamos como quedo nuestro diccionario:

>>> d
{'a': 1}
>>>
Anuncios

Para nuestra siguiente prueba volveremos a ejecutar setdefault pero para establecer un nuevo valor:

>>> d.setdefault('a',5)
1
>>>
Anuncios

Oops, que paso? Nada, una vez establecido un valor dentro de la clave este no puede ser sobreescrito pero si podemos actualizarlo como vimos anteriormente.

Anuncios

En resumen, hoy hemos visto uno de tipo de datos estructurados mas importante, o el mas importante, en este lenguaje, hemos visto como crearlo, como se puede manejar la informacion en el mismo, formas de obtener los valores y otros menesteres, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.00