Crear tu propio diccionario en Python

Autor: | Última modificación: 8 de marzo de 2024 | Tiempo de Lectura: 2 minutos
Temas en este post: , ,

Diccionario en Python

Los diccionarios (dict en Python y maps en otros lenguajes) son una de las clases y estructuras de datos más comunes y útiles que hay.

Los diccionarios sirven para asociar dos objetos entre sí, la clave y el valor. Un diccionario podría considerarse una colección de dichas parejas clave-valor que se puede buscar precisamente por la clave.

Tu propio diccionario

Además de usar la clase dict que viene con Python, tal vez no sepas que puedes crear tu propio diccionario.

Supongamos que tienes una clase que representa una API REST remota y tienes métodos para acceder a endpoints y que te devuelva un JSON.

Además, te gustaría poder usarla como si fuese un dict, donde la URL del endpoint es la clave y el JSON resultante es el valor. ¡Puedes hacerlo!

DictMixin

Para ello, solo tienes que heredar de la clase DictMixin del módulo collections e implementar algunos métodos. Una vez lo tengas hecho, podrás utilizar dicha clase como si fuese un diccionario de Python.

Los métodos que tienes que implementar son los siguientes:

__getitem__
__delitem__
__setitem__
keys

Gestión de errores

Los siguientes métodos deben de lanzar la excepción KeyError si no existe una clave para ese valor: getitem, setitem y delitem.

Por otro lado, los siguientes métodos deben de lanzar la excepción TypeError si la clave proporcionada no es del tipo adecuado: getitem, setitem y delitem.

Ejemplo de Diccionario

from collections import MutableMapping as DictMixin

class RestAPI(DictMixin):
    # La clase RestAPI sólo tiene que implementar 
    # getitem, setitem, delitem y keys(como mínimo) 
    # y python proporcionará los demás métodos basados en esos
    
    # getitem and delitem deben lanzar KeyError si no hay ningín valor para 
    # esa clave.
    # getitem, setitem y delitem deben lanzar TypeError si la 
    # clave es del tipo equivocado

    def __getitem__(self, key):
        pass

    def __setitem__(self, key, item):
        pass

    def __delitem__(self, key):
        pass

    def keys(self):
        pass