¿Cómo usar una lista como clave de un diccionario en Python 3?

En Python, usamos diccionarios para verificar si un elemento está presente o no. Los diccionarios utilizan el par clave:valor para buscar si una clave está presente o no y, si la clave está presente, cuál es su valor. Podemos usar números enteros, strings, tuplas como claves de diccionario, pero no podemos usar listas como claves. El motivo se explica a continuación.

¿Cómo busca Python Dictionaries sus claves? 
 

Si los diccionarios de Python simplemente iteran sobre sus claves para verificar si las claves dadas están presentes o no, tomaría O (N) tiempo. Pero los diccionarios de Python toman O (1) para verificar si la clave está presente o no. Entonces, cómo los diccionarios buscan la clave, para cada clave genera un valor hash para la clave y por este valor hash, puede rastrear sus elementos.

Problemas si se usaran listas como clave de diccionarios 
 

Las listas son objetos mutables, lo que significa que podemos cambiar valores dentro de una lista, agregar o eliminar valores de la lista. Entonces, si se genera una función hash a partir de una lista y luego los elementos de las listas cambiaron, el diccionario generará un nuevo valor hash para esta lista y no pudo encontrarlo.

Por ejemplo, si la lista es a = [1, 2, 3, 4, 5]y supone el hash de una lista, es la suma de los valores dentro de la lista. Entonces hash(a) = 15. Ahora agregamos 6 a a . Entonces a = [1, 2, 3, 4, 5, 6]hash (a) = 21. Entonces, el valor hash de un cambio. Por lo tanto, no se puede encontrar dentro del diccionario.

Otro problema son las diferentes listas con el mismo valor hash. Si b = [5, 5, 5]hash(b) = 15. Entonces, si a (Del ejemplo anterior con el mismo valor hash) está presente dentro del diccionario, y si buscamos b. Entonces el diccionario puede darnos un resultado incorrecto.

Como lidiar con esto 

Podemos cambiar la lista en objetos inmutables como strings o tuplas y luego podemos usarla como clave. A continuación se muestra la implementación del enfoque.
 

# Declaring a dictionary
d = {} 
  
# This is the list which we are 
# trying to use as a key to
# the dictionary
a =[1, 2, 3, 4, 5]
  
# converting the list a to a string
p = str(a)
d[p]= 1
  
# converting the list a to a tuple
q = tuple(a) 
d[q]= 1
  
for key, value in d.items():
    print(key, ':', value)

 
Producción:

[1, 2, 3, 4, 5] : 1
(1, 2, 3, 4, 5) : 1

Publicación traducida automáticamente

Artículo escrito por pedastrian y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *