Bienvenidos sean a este post, hoy hablaremos sobre otras de las funciones dentro del modulo de colecciones.
Este tipo de dato fue agregado a partir de la version 3.3, este se comporta como un diccionario normal pero segun la documentacion oficial de Python:
Es proporcionado para vincular rapidamente un numero de asignaciones para que puedan ser tratados como una sola unidad
Guido van Rossum
Esto es mas practico y rapido que crear un diccionario con multiples llamadas de actualizacion en ellas, este objeto puede ser usado para simular ambitos simulados y utiles para la creacion de plantillas, todas las asignaciones subyacentes se asignan en una lista, la misma es publica y puede ser accedida o actualizada usando los atributos de mapas, las busquedas se hacen en las asignaciones subyacentes hasta que se encuentre una clave, por el contrario escribir, actualizar y borrar solo opera en el primer mapeo, un uso muy comun es proveer predeterminados, para ello veamos el siguiente ejemplo:
>>> from collections import ChainMap
>>> default_conn = {'host': 'localhost', 'puerto': 4567}
>>> conn = {'puerto': 5678}
>>>
Como siempre primero importamos el tipo de dato desde el modulo de colecciones, una vez importado vamos a crear dos diccionarios, uno se llamara default_conn y seran los valores predeterminados para nuestras conexiones y el otro se llamara conn y sera el de conexion, observen que tienen valores distintos, nuestro siguiente paso sera implementar a ChainMap:
>>> c = ChainMap(conn, default_conn)
Como pueden ver en un nuevo objeto almacenamos el resultado de la funcion ChainMap, primero pasamos la conexion (conn) y luego el valor predeterminado porque este dato no deberiamos modificarlo sino unicamente al primero, veamos como nos devuelve los datos:
>>> c['puerto']
5678
>>> c['host']
'localhost'
>>>
Como puerto existe en el primer diccionario nos devuelve el valor que posee, en cambio cuando buscamos a host nos devuelve el de los valores predeterminados, esta es su gran ventaja, veamos como esta mapeado:
>>> c.maps
[{'puerto': 5678}, {'host': 'localhost', 'puerto': 4567}]
>>>
Pasemos a agregar un host para nuestra conexion (conn):
>>> c['host'] = 'tinchicus.com'
Como pueden ver se agregan de una manera muy simple y recuerden que solo afectara a conn, si hacemos un maps ahora veremos este resultado:
>>> c.maps
[{'puerto': 5678, 'host': 'tinchicus.com'},
{'host': 'localhost', 'puerto': 4567}]
>>>
En este caso se agrego un nuevo dato pero solo afecto a conn, vamos a hacer la siguiente modificacion:
>>> del c['puerto']
Lo que hicimos fue borrar el puerto de conn, si hacemos un maps de nuestro ChainMap veremos lo siguiente:
>>> c.maps
[{'host': 'tinchicus.com'}, {'host': 'localhost', 'puerto': 4567}]
>>>
Aqui podemos ver como nos quedo un solo dato en el diccionario del inicio, automaticamente nuestro valores»predeterminados» quedaron unidos a los valores de la conexion (conn), vamos a verificarlo de la siguiente manera:
>>> dict(c)
{'host': 'tinchicus.com', 'puerto': 4567}
>>>
Como ven siempre tendremos un valor para nuestro diccionario, esto gracias a simplemente agregar los valores por medio de ChainMap, el que conoce programacion de otros lenguajes mas complejos sabe lo tremendamente valioso que es esto.
En resumen, hoy hemos visto a ChainMap, como es su estructura, como trabaja, como podemos usarlo, un ejemplo practico para poder verlo en accion, 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.


Donación
Es para mantenimento del sitio, gracias!
$1.00
