Tablas hash y mapas hash en Python

Publicado: 2022-11-06

Los datos requieren múltiples formas de ser accedidos o almacenados. Hash Tables y Hashmaps resultan ser las mejores estructuras de datos para implementar esto en Python a través del tipo de datos integrado conocido como diccionario.

Un Hashmap o una tabla Hash en la estructura de datos asigna claves a sus pares de valores y utiliza una función que calcula cualquier valor de índice que contenga los elementos que se insertarán, buscarán o eliminarán. Esto ayuda a que el acceso a los datos sea más fácil y rápido. Las tablas hash generalmente almacenan pares clave-valor y usan la función hash para generar una clave.

En este artículo, aprenderá qué son las tablas hash y los mapas hash y cómo se implementan en Python.

Aprenda ciencia de datos para ganar ventaja sobre sus competidores

Tabla de contenido

¿Qué es una tabla Hash o un Hashmap Python?

Una tabla hash o hashmap Python es una estructura de datos indexada. Utiliza funciones hash para calcular un índice mediante el uso de una clave en una matriz de ranuras o cubos. Puede asignar su valor a un depósito utilizando el índice correspondiente, y la clave es inmutable y única.

Los Hashmaps son similares a un gabinete de cajones etiquetados con las cosas que almacenan. Por ejemplo, los hashmaps pueden almacenar información del usuario como el nombre y apellido, etc., en el depósito.

La función hash es integral para la implementación de un hashmap. Utiliza la clave y la traduce al índice del depósito en la lista de depósitos. El hashing ideal produce un índice separado para cada clave. Sin embargo, tenga en cuenta que pueden producirse colisiones. Cuando el hashing produce un índice ya existente, se puede usar fácilmente un cubo para múltiples valores al volver a hacer el hash o agregar una lista. En Python, un ejemplo de mapas hash son los diccionarios.

Analicemos la implementación de hashmap en detalle para aprender a personalizar y crear estructuras de datos para la optimización de búsqueda.

Hashmap en Python

El hashmap incluye las siguientes funciones:

  • set_val(clave, valor): Esta función se utiliza para insertar un par clave-valor en el mapa hash. Si ya existe un valor en el mapa hash, debe actualizar el valor.
  • get_val(clave): esta función devuelve el valor a la clave especificada que está asignada o "No se encontró ningún registro" si este mapa no tiene ninguna asignación para la clave.
  • delete_val(key): elimina la asignación de la clave en particular si hashmap tiene la asignación de la clave.

Implementación:-

tabla hash de clase:

# Crear una lista de deseos vacía del tamaño dado

def __init__(uno mismo, tamaño):

self.tamaño = tamaño

self.hash_table = self.create_buckets()

def create_buckets(auto):

devuelve [[] para _ en rango (self.size)]

# Insertar valores en el mapa hash

def set_val(self, clave, val):

# Obtener el índice de la clave

# usando la función hash

hash_key = hash(clave) % self.size

# Obtener el depósito correspondiente al índice

depósito = self.hash_table[hashed_key]

llave_encontrada = Falso

para el índice, registre en enumerar (depósito):

record_key, record_val = registro

# comprobar si el depósito tiene la misma clave que

# la clave a insertar

si record_key == clave:

clave_encontrada = Verdadero

descanso

# Si el cubo tiene la misma llave que la llave que se va a insertar,

# Actualizar el valor de la clave

# De lo contrario, agregue el nuevo par clave-valor al depósito

si se encuentra_clave:

cubeta[índice] = (clave, valor)

más:

cubeta.append((clave, valor))

# Devuelve el valor buscado con clave específica

def get_val(self, clave):

# Obtenga el índice de la clave usando

# función hash

hash_key = hash(clave) % self.size

# Obtener el depósito correspondiente al índice

depósito = self.hash_table[hashed_key]

llave_encontrada = Falso

para el índice, registre en enumerar (depósito):

record_key, record_val = registro

# comprobar si el depósito tiene la misma clave que

# la clave que se busca

si record_key == clave:

clave_encontrada = Verdadero

descanso

# Si el depósito tiene la misma clave que la clave que se busca,

# Devuelve el valor encontrado

# De lo contrario indica que no se encontró ningún registro

si se encuentra_clave:

devolver record_val

más:

devolver "No se encontró ningún registro"

# Eliminar un valor con clave específica

def delete_val(self, clave):

# Obtenga el índice de la clave usando

# función hash

hash_key = hash(clave) % self.size

# Obtener el depósito correspondiente al índice

depósito = self.hash_table[hashed_key]

llave_encontrada = Falso

para el índice, registre en enumerar (depósito):

record_key, record_val = registro

# comprobar si el depósito tiene la misma clave que

# la clave a borrar

si record_key == clave:

clave_encontrada = Verdadero

descanso

si se encuentra_clave:

cubeta.pop(índice)

devolver

# Para imprimir los elementos del mapa hash

def __str__(uno mismo):

devuelve “”.join(str(elemento) para el elemento en self.hash_table)

tabla_hash = tabla hash(50)

# insertar algunos valores

hash_table.set_val([email protected]', 'algún valor')

imprimir (tabla_hash)

impresión()

hash_table.set_val('[email protected]', 'algún otro valor')

imprimir (tabla_hash)

impresión()

# buscar/acceder a un registro con clave

imprimir(hash_table.get_val('[email protected]'))

impresión()

# eliminar o eliminar un valor

hash_table.delete_val('[email protected]')

imprimir (tabla_hash)

Producción:-

[][][][][][][][][][][][][][][][][][][][][] ([email protected]', 'algún valor') ][][][][][][][][][][][][][][][][][][][][][][] [][][][]

[][][][][][][][][][][][][][][][][][][][][] ([email protected]', 'algún valor') ][][][][][][('[email protected]', 'algún otro valor')][][][][][][][][][ ][][][][][][][][][][][][]

Algún otro valor

[][][][][][][][][][][][][][][][][][][][][] ([email protected]', 'algún valor') ][][][][][][][][][][][][][][][][][][][][][][] [][][][]

Consulte nuestros programas de ciencia de datos de EE. UU.

Programa de certificado profesional en ciencia de datos y análisis empresarial Maestría en Ciencias en Ciencia de Datos Maestría en Ciencias en Ciencia de Datos Programa de Certificado Avanzado en Ciencia de Datos
Programa PG Ejecutivo en Ciencia de Datos Bootcamp de programación Python Programa de Certificado Profesional en Ciencia de Datos para la Toma de Decisiones Empresariales Programa Avanzado en Ciencia de Datos

Realización de operaciones en tablas hash utilizando diccionarios:

Existen numerosas operaciones que se pueden realizar en Python en tablas hash a través de diccionarios. Son los siguientes:-

  • Acceso a valores
  • Actualización de valores
  • Borrando elemento

Acceder a valores:

Puede acceder fácilmente a los valores de un diccionario de las siguientes maneras:-

  • Uso de valores clave
  • Uso de funciones
  • Implementando el bucle for

Usando valores clave:

Puede acceder a los valores del diccionario utilizando los valores clave como se muestra a continuación:

my_dict={'Elsa' : '001' , 'Anna': '002' , 'Olaf': '003'}

mi_dict['Anna']

Salida: '002'

Usando funciones:

Hay numerosas funciones integradas como get(), keys(), values(), etc.

my_dict={'Elsa' : '001' , 'Anna': '002' , 'Olaf': '003'}

imprimir (my_dict.keys())

imprimir(mi_dict.valores())

imprimir(mi_dict.get('Elsa'))

Producción:-

dict_keys(['Elsa', 'Anna', 'Olaf'])

valores_dict(['001', '002', '003'])

001

Implementando el bucle for:

El ciclo le da acceso a los pares clave-valor de un diccionario iterándolos. Por ejemplo:

my_dict={'Elsa' : '001' , 'Anna': '002' , 'Olaf': '003'}

imprimir(“Todas las claves”)

para x en mi_dict:

print(x) #imprime las claves

imprimir(“Todos los valores”)

para x en my_dict.values():

print(x) #imprime valores

print(“Todas las claves y valores”)

para x,y en my_dict.items():

print(x, “:” , y) #imprime claves y valores

Producción:

Todas las llaves

Elsa

ana

Olaf

Todos los valores

001

002

003

Todas las claves y valores

Elsa: 001

Ana: 002

Olaf: 003

Actualización de valores:

Los diccionarios son tipos de datos mutables que se pueden actualizar cuando sea necesario. Puedes hacer lo siguiente:-

my_dict={'Elsa' : '001' , 'Anna': '002' , 'Olaf': '003'}

my_dict['Olaf'] = '004' #Actualizando el valor de Dave

my_dict['Kristoff'] = '005' #agregar un par clave-valor

imprimir (mi_dict)

Salida : {'Elsa': '001', 'Anna': '002', 'Olaf': '004', 'Kristoff': '005'}

Eliminación de elementos de un diccionario:

Puede eliminar elementos de un diccionario con funciones como del(), pop(), popitem(), clear(), etc. Por ejemplo:

my_dict={'Elsa' : '001' , 'Anna': '002' , 'Olaf': '003'}

del my_dict['Elsa'] #elimina el par clave-valor de 'Elsa'

my_dict.pop('Anna') #elimina el valor de 'Anna'

my_dict.popitem() #elimina el último elemento insertado

imprimir (mi_dict)

Salida : {'Olaf': '003'}

Conclusión

Podemos concluir fácilmente que los mapas hash y la tabla hash Python son integrales para un acceso más fácil y rápido a los datos relevantes. Es una herramienta valiosa para los profesionales de la ciencia de datos, como los científicos de datos y los analistas de datos. Si está interesado en obtener más información sobre el campo de la ciencia de datos, upGrad tiene el mejor programa de certificación profesional en ciencia de datos para la toma de decisiones empresariales .

¿Qué es un mapa hash, Python y una tabla hash, Python?

Una tabla hash ayuda a almacenar pares clave-valor donde se genera una clave mediante una función hash. Las implementaciones de hashmaps o hashtable en Python se realizan con diccionarios integrados.

¿Cuál es la diferencia entre un mapa hash y una tabla hash de Python?

Un Hashmap no está sincronizado, pero un Hashtable sí está sincronizado. Esto significa que las tablas Hash son seguras para subprocesos y se pueden compartir entre numerosos subprocesos, pero HashMap necesita una sincronización adecuada antes de compartirse.

¿Es el mapa una tabla Hash?

Una tabla hash de Python, también llamada mapa hash, es una estructura de datos que asigna claves a valores. Utiliza la técnica de hash.