Tabelas de hash e mapas de hash em Python

Publicados: 2022-11-06

Os dados exigem várias maneiras de serem acessados ​​ou armazenados. Hash Tables e Hashmaps são as melhores estruturas de dados para implementar isso em Python por meio do tipo de dados integrado conhecido como dicionário.

Um Hashmap ou uma tabela Hash na estrutura de dados mapeia chaves para seus pares de valores e usa uma função que calcula qualquer valor de índice que contenha os elementos a serem inseridos, pesquisados ​​ou removidos. Isso ajuda a tornar o acesso aos dados mais fácil e rápido. As tabelas de hash geralmente armazenam pares de valores-chave e usam a função de hash para gerar uma chave.

Neste artigo, você aprenderá o que são Hash Tables e Hashmaps e como eles são implementados em Python.

Aprenda ciência de dados para ganhar vantagem sobre seus concorrentes

Índice

O que é uma tabela Hash ou um Hashmap Python?

Uma tabela de hash ou hashmap Python é uma estrutura de dados indexada. Ele usa funções de hash para calcular um índice usando uma chave em uma matriz de slots ou buckets. Você pode mapear seu valor para um bucket usando o índice correspondente, e a chave é imutável e exclusiva.

Hashmaps são semelhantes a um armário de gavetas rotulado com as coisas que eles armazenam. Por exemplo, os hashmaps podem armazenar informações do usuário, como nome e sobrenome, etc., no bucket.

A função hash é integral para a implementação de um hashmap. Ele usa a chave e a traduz para o índice do bucket na lista de buckets. O hash ideal produz um índice separado para cada chave. No entanto, tenha em mente que podem ocorrer colisões. Quando o hash produz um índice já existente, um bucket para vários valores pode ser facilmente usado rehashing ou anexando uma lista. Em Python, um exemplo de mapas de hash são os dicionários.

Vamos analisar a implementação do hashmap em detalhes para aprender a personalizar e construir estruturas de dados para otimização de pesquisa.

Hashmap em Python

O hashmap inclui as seguintes funções:

  • set_val(chave, valor): Esta função é usada para inserir um par chave-valor no mapa de hash. Se já houver um valor existente no mapa de hash, você deverá atualizar o valor.
  • get_val(key): Esta função retorna o valor para a chave especificada que está mapeada ou “Nenhum registro encontrado” se este mapa não tiver mapeamento para a chave.
  • delete_val(key): Exclui o mapeamento para a chave específica se o hashmap tiver o mapeamento para a chave.

Implementação:-

classe Hashtable:

# Cria uma lista de buckets vazia de determinado tamanho

def __init__(self, tamanho):

self.size = tamanho

self.hash_table = self.create_buckets()

def create_buckets(self):

return [[] for _ in range(self.size)]

# Insere valores no mapa de hash

def set_val(self, key, val):

# Obtém o índice da chave

# usando a função hash

hashed_key = hash(chave) % self.size

# Obtém o bucket correspondente ao índice

bucket = self.hash_table[hashed_key]

found_key = False

para índice, registre em enumerate(bucket):

record_key, record_val = registro

# verifica se o bucket tem a mesma chave que

# a chave a ser inserida

if record_key == key:

found_key = Verdadeiro

parar

# Se o bucket tiver a mesma chave que a chave a ser inserida,

# Atualiza o valor da chave

# Caso contrário, anexe o novo par de valores-chave ao bucket

se encontrado_chave:

bucket[índice] = (chave, valor)

senão:

bucket.append((chave, val))

# Retorna o valor pesquisado com chave específica

def get_val(self, chave):

# Obtém o índice da chave usando

#função hash

hashed_key = hash(chave) % self.size

# Obtém o bucket correspondente ao índice

bucket = self.hash_table[hashed_key]

found_key = False

para índice, registre em enumerate(bucket):

record_key, record_val = registro

# verifica se o bucket tem a mesma chave que

# a chave que está sendo pesquisada

if record_key == key:

found_key = Verdadeiro

parar

# Se o bucket tiver a mesma chave que a chave que está sendo pesquisada,

# Retorna o valor encontrado

# Caso contrário, indique que não foi encontrado nenhum registro

se encontrado_chave:

retornar record_val

senão:

return “Nenhum registro encontrado”

# Remove um valor com chave específica

def delete_val(self, key):

# Obtém o índice da chave usando

#função hash

hashed_key = hash(chave) % self.size

# Obtém o bucket correspondente ao índice

bucket = self.hash_table[hashed_key]

found_key = False

para índice, registre em enumerate(bucket):

record_key, record_val = registro

# verifica se o bucket tem a mesma chave que

# a chave a ser deletada

if record_key == key:

found_key = Verdadeiro

parar

se encontrado_chave:

bucket.pop(índice)

Retorna

# Para imprimir os itens do mapa de hash

def __str__(self):

return “”.join(str(item) para item em self.hash_table)

hash_table = HashTable(50)

#inserir alguns valores

hash_table.set_val([email protected]', 'algum valor')

print(tabela_hash)

imprimir()

hash_table.set_val('[email protected]', 'algum outro valor')

print(tabela_hash)

imprimir()

# busca/acessa um registro com chave

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

imprimir()

# exclui ou remove um valor

hash_table.delete_val('[email protected]')

print(tabela_hash)

Resultado:-

[][][][][][][][][][][][][][][][][][][] ([email protected]', 'algum valor') ][][][][][][][][][][][][][][][][][][][][] [][][][]

[][][][][][][][][][][][][][][][][][][] ([email protected]', 'algum valor') ][][][][][][('[email protected]', 'algum outro valor')][][][][][][][][][ ][][][][][][][][][][][]

Algum outro valor

[][][][][][][][][][][][][][][][][][][] ([email protected]', 'algum valor') ][][][][][][][][][][][][][][][][][][][][] [][][][]

Confira nossos EUA - Programas de Ciência de Dados

Programa de certificação profissional em ciência de dados e análise de negócios Mestrado em Ciência de Dados Mestrado em Ciência de Dados Programa de certificação avançada em ciência de dados
Programa Executivo PG em Ciência de Dados Bootcamp de programação Python Programa de Certificação Profissional em Ciência de Dados para Tomada de Decisões de Negócios Programa Avançado em Ciência de Dados

Executando operações em tabelas de hash usando dicionários:

Existem inúmeras operações que podem ser executadas em Python em tabelas de hash por meio de dicionários. São os seguintes:-

  • Acessando valores
  • Atualizando valores
  • Excluindo elemento

Acessando Valores:

Você pode acessar facilmente os valores de um dicionário das seguintes maneiras:-

  • Usando valores-chave
  • Usando funções
  • Implementando o loop for

Usando valores de chave:

Você pode acessar os valores do dicionário usando os valores de chave como abaixo: -

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

my_dict['Anna']

Saída: '002'

Usando funções:

Existem inúmeras funções internas, como get(), keys(), values(), etc.

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

print(my_dict.keys())

print(my_dict.values())

print(my_dict.get('Elsa'))

Resultado:-

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

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

001

Implementando o loop for:

O loop fornece acesso aos pares chave-valor de um dicionário, iterando sobre eles. Por exemplo:

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

print("Todas as chaves")

para x em my_dict:

print(x) #imprime as chaves

print("Todos os valores")

para x em my_dict.values():

print(x) #imprime valores

print("Todas as chaves e valores")

para x,y em my_dict.items():

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

Resultado:

Todas as chaves

Elsa

Ana

Olaf

Todos os valores

001

002

003

Todas as chaves e valores

Elsa: 001

Ana: 002

Olaf: 003

Atualizando valores:

Os dicionários são tipos de dados mutáveis ​​que podem ser atualizados quando necessário. Você pode fazer o seguinte: -

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

my_dict['Olaf'] = '004' #Atualizando o valor de Dave

my_dict['Kristoff'] = '005' #adicionando um par chave-valor

print(my_dict)

Saída : {'Elsa': '001' , 'Anna': '002' , 'Olaf': '004', 'Kristoff': '005'}

Excluindo itens de um dicionário:

Você pode excluir itens de um dicionário com funções como del(), pop(), popitem(), clear(), etc. Por exemplo:

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

del my_dict['Elsa'] #remove o par chave-valor de 'Elsa'

my_dict.pop('Anna') #remove o valor de 'Anna'

my_dict.popitem() #remove o último item inserido

print(my_dict)

Saída : {'Olaf': '003'}

Conclusão

Podemos concluir facilmente que os hashmaps e a tabela de hash Python são integrais para um acesso mais fácil e rápido a dados relevantes. É uma ferramenta valiosa para profissionais de ciência de dados, como cientistas de dados e analistas de dados. Se você está interessado em aprender mais sobre a área de Ciência de Dados, o upGrad tem o melhor Programa de Certificação Profissional em Ciência de Dados para Tomada de Decisões de Negócios .

O que é um mapa de hash, Python e tabela de hash, Python?

Uma tabela de hash ajuda a armazenar pares de valores-chave em que uma chave é gerada usando uma função de hash. Hashmaps ou implementações de hashtable em Python são feitos com dicionários integrados.

Qual é a diferença entre um hashmap e uma tabela de hash Python?

Um Hashmap não é sincronizado, mas uma Hashtable é sincronizada. Isso significa que as tabelas Hash são thread-safe e podem ser compartilhadas entre vários threads, mas o HashMap precisa de sincronização adequada antes de ser compartilhado.

O mapa é uma tabela de hash?

Uma tabela de hash Python, também chamada de mapa de hash, é uma estrutura de dados que mapeia chaves para valores. Ele usa a técnica de hash.