Tipo não lavável “dito '

Tipo não lavável “dito '
Em Python, um dicionário refere-se a uma coleção não ordenada de pares de valor-chave. Cada chave é mapeada para um valor específico no dicionário. A chave de um dicionário é única e é usada para acessar o valor correspondente.

No entanto, uma chave de um dicionário Python deve ser hashable. Um objeto hashable significa que o objeto é imutável e pode produzir um valor de hash único.

Portanto, usar um objeto não lavável como a chave de um dicionário resultará em um erro.

Vamos discutir como podemos resolver este erro.

Erro de exemplo

Considere o código abaixo que ilustra como esse tipo de erro ocorre.

Desenvolvedores = "Games": 200, "Database": 100, "Full_stack": 500
>>> funcionários = desenvolvedores: 800
Traceback (chamada mais recente):
Arquivo "", linha 1, em
TypeError: Tipo não lavável: 'Dict'

No exemplo acima, começamos definindo um dicionário que detém o tipo de desenvolvedor e o número total.

Criamos um dicionário de funcionários que toma o dicionário do desenvolvedor como a chave na segunda parte.

Como um dicionário é ilegal, Python não pode usá -lo como a chave de um dicionário.

Python verifique se o objeto é hashable

A pergunta vem, como sei se um objeto é hashable ou não? Em Python, você pode usar a função de hash para determinar se um objeto é hashable.

Um exemplo é como mostrado:

>>> Hash ("chave")
-4481039435095198476

Se um objeto for hashable, ele deve retornar um hash único, como mostrado no exemplo acima. Como uma string é hashable, ela retorna um hash único.

Se você tentar a mesma operação em um dicionário ou uma lista, receberá um erro como mostrado:

>>> Hash ([1,2,3,4,5])
Traceback (chamada mais recente):
Arquivo "", linha 1, em
TypeError: Unfashable Type: 'List'

Não é hashable, pois uma lista é mutável, como mostrado no erro acima.

Correção: TypeError: Indodível Tipo: 'Dict'

Se você deseja usar um dicionário como uma chave para outro dicionário, você pode fazer isso primeiro convertendo -o em uma tupla.

Uma tupla é hashable, como mostrado no exemplo abaixo:

>>> Hash ((1,2,3,4,5))
-5659871693760987716

Vamos resolver nosso primeiro erro convertendo o dicionário do desenvolvedor em uma tupla:

>>> desenvolvedores = tupla (desenvolvedores)
>>> Imprimir (desenvolvedores)
('jogos', 'banco de dados', 'full_stack')

Depois de convertê -lo em uma tupla, podemos usá -la como uma chave no dicionário, como mostrado:

>>> funcionários = desenvolvedores: 800
>>> Imprimir (funcionários)
('jogos', 'banco de dados', 'full_stack'): 800

Correção 2

Outra solução é usar o dicionário como um valor. Por exemplo, podemos usar o dicionário do desenvolvedor como um valor para o dicionário dos funcionários.

Pegue a ilustração de código abaixo:

>>> desenvolvedores = "jogos": 200, "banco de dados": 100, "Full_stack": 500
>>> funcionários = "funcionários": desenvolvedores
>>> Imprimir (funcionários)
'Funcionários': 'Games': 200, 'Database': 100, 'Full_stack': 500

Nesse caso, o código não retorna um erro, pois estamos usando o dicionário como valor para um novo dicionário.

Usando um loop

Outro método não convencional é usar um loop para. Você pode iterar sobre cada chave e um par de valor de um dicionário e adicioná -los a um novo dicionário.

Considere o exemplo abaixo:

>>> desenvolvedores = "jogos": 200, "banco de dados": 100, "Full_stack": 500
>>> para k, v em desenvolvedores.Unid():
… Funcionários [k] = V
..
>>> funcionários
'funcionários': 'jogos': 200, 'banco de dados': 100, 'Full_stack': 500, 'jogos': 200, 'banco de dados': 100, 'Full_stack': 500

Nesse caso, usamos um loop for para iterar sobre os itens de dicionário dos desenvolvedores e anexá -los ao ditado dos funcionários.

Fechamento

Este artigo explorou três métodos de fixação do Erro "TypeError: Incordível:" Dict "" no Python.