lista de tipos de Python sin hash

Funciones y métodos de Python

Los diccionarios de Python solo aceptan tipos de datos hash como clave en un diccionario. Una lista no es un tipo de datos hash. Si especifica una lista como clave en un diccionario, encontrará un & ldquo; TypeError: tipo inhashable: & lsquo; list & rsquo; & rdquo; error.

En esta guía, hablamos sobre lo que significa este error y por qué lo ve en su código. Veremos un ejemplo de este error para mostrarle cómo resolverlo.




TypeError: tipo inhashable: & lsquo; list & rsquo;

Los diccionarios tienen dos partes: claves y valores. Las claves son las etiquetas asociadas con un valor particular. Para acceder a un valor, debe hacer referencia al nombre de la clave de ese valor.

Si bien los valores pueden ser de cualquier tipo de datos, desde listas a cadenas , solo los objetos hash son aceptables como claves. Los objetos hash son objetos con un valor hash que no cambia con el tiempo. & Nbsp; Ejemplos de objetos hash son tuplas y cadenas.

Las listas no tienen un valor hash invariable. Sus valores hash pueden cambiar con el tiempo. Esto significa que no puede especificar una lista como clave de diccionario. & Nbsp;




Un escenario de ejemplo

Creemos un programa que cree una lista de estudiantes que tienen una calificación promedio de más de 75. Esta lista contendrá registros de diccionario de cada estudiante y sus calificaciones. Para crear este diccionario, trabajaremos a partir de un diccionario con una lista de todos los estudiantes de una escuela y sus calificaciones.

Comencemos por definir una lista de estudiantes y un diccionario para nuestros mejores estudiantes:

 estudiantes = [{"nombre": "Linda", "calificaciones": [84 , 82, 65]}, {"nombre": "Alex", "calificaciones": [67, 68, 83]}, {"nombre": "Holly", "calificaciones": [72, 74, 81]} ] top_students = {} 

Cada valor en el & ldquo; estudiantes & rdquo; list es un diccionario. Cada diccionario contiene dos claves: nombre y calificaciones. Hemos definido un diccionario llamado & ldquo; top_students & rdquo; que contendrá la información sobre nuestros mejores estudiantes.

El 81% de los participantes dijeron que se sentían más seguros sobre sus perspectivas laborales después de asistir a un bootcamp. Asóciese a un bootcamp hoy.

El graduado promedio de bootcamp pasó menos de seis meses en la transición de carrera, desde comenzar un bootcamp hasta encontrar su primer trabajo.

Ahora que hemos definido esto diccionario, usamos un bucle for para filtrar los estudiantes cuyas calificaciones promedio son superiores a 75 y agregarlos a nuestro nuevo diccionario:

 para s en estudiantes: promedio = suma (s ["grados"]) / len (s ["grados"]) si es promedio & gt; 75: top_students [s ["grade"]] = s ["name"] 

En cada iteración del ciclo for, calculamos el promedio de todas las calificaciones que ha obtenido un estudiante. Hacemos esto dividiendo el total de todas las calificaciones por la cantidad de calificaciones que se han registrado.

A continuación, verificamos si ese promedio es mayor que 75. Si es así, creamos una nueva entrada en el diccionario top_students con el nombre de un estudiante y sus calificaciones.

Finalmente, imprimimos el diccionario top_students en la consola para ver a todos los estudiantes que tienen una calificación promedio de más de 75:

 print (top_students) 

Ejecute nuestro código y vea qué sucede:

 Traceback (última llamada más reciente): Archivo "main.py", línea 11 , en & lt; módulo & gt; top_students [s ["grade"]] = s ["name"] TypeError: unhashable type: 'list' 

Nuestro código no se ejecuta correctamente.




El Solución

Nuestro código funciona hasta que el intérprete llega a la línea 11. En esta línea, nuestro código dice:

El error en nuestro código se debe a que hemos intentado asignar una lista como una clave en un diccionario. Cuando nuestro código analiza esta línea en la primera iteración de nuestro bucle, nuestro código intenta crear un diccionario con la siguiente clave y valor:

 {[84, 82, 65]:" Linda "} 

Este es un diccionario no válido. Nuestro código intenta asignar una lista como clave que no funciona.

Para resolver este problema, usamos el nombre del estudiante como clave en el diccionario en lugar de la lista de calificaciones:

 top_students [s ["nombre"]] = s ["grados"] 

Hemos asignado la lista de calificaciones como un valor en lugar de como una clave. El nombre del alumno es la clave del diccionario. Ejecutemos nuestro código:

 {'Linda': [84, 82, 65] , 'Holly': [72, 74, 81]} 

Nuestro código crea exitosamente un diccionario con información sobre los estudiantes con mejor desempeño. Se agregó al diccionario cualquier estudiante cuya calificación promedio en sus últimas tres pruebas sea superior a 75.


Nuestro diccionario se divide de la siguiente manera:

  • Claves: Linda, Holly
  • Valores: [84, 82, 65], [72, 74, 81]

Debido a que ahora estamos asignando cadenas a nuestros nombres de clave, nuestro código funciona.




Conclusión

El error & ldquo; TypeError: unhashable type: & lsquo; list & rsquo; & rdquo; aparece cuando intenta asignar una lista como clave en un diccionario. Para solucionar este error, asegúrese de asignar solo un objeto hash, como un cadena o tupla, como clave para un diccionario.

¡Ahora estás listo para resolver este error como un programador profesional!





lista de tipos de Python sin hash: StackOverflow Questions

Tutorials