76 votos

¿En que casos debo utilizar una tupla como clave de un diccionario?

Yo estaba estudiando la diferencia entre listas y tuplas (en Python). Una obvia es que las tuplas son inmutables (los valores no se pueden cambiar después de la asignación inicial), mientras que las listas son mutables.

Una frase en el artículo que me hizo:

Sólo los elementos inmutables puede ser utilizado como las claves de diccionario, y por lo tanto sólo las tuplas y no listas pueden ser utilizadas como claves.

Tengo un tiempo difícil pensar en una situación en la que me gustaría usar una tupla como clave de un diccionario. ¿Puede dar un ejemplo de problema en el que este sería el natural, eficiente, elegante, o solución obvia?

Editar:

Gracias por tus ejemplos. Hasta ahora tengo una aplicación muy importante es el almacenamiento en caché de los valores de la función.

108voto

Imran Puntos 20117

Ejemplo clásico: la Que desea almacenar el valor de punto como tupla de la forma (x, y)

28voto

bgbg Puntos 4713
salaries = {}
salaries[('John', 'Smith')] = 10000.0
salaries[('John', 'Parker')] = 99999.0

EDICIÓN 1 Por supuesto, usted puede hacer salaries['John Smith'] = whatever, pero entonces usted tendrá que hacer trabajo extra para separar la clave en los nombres y apellidos. ¿Qué acerca de la pointColor[(x, y, z)] = "red", aquí el beneficio de la tupla clave es más prominente.

Debo destacar que esta no es la mejor práctica. En muchos casos es mejor crear clases especiales para manejar situaciones como esa, pero Arrieta pidió ejemplos, que yo le di a ella (él).

EDICIÓN 0

Por el camino, cada elemento de la tupla tiene que ser hashable demasiado:

>>> d = {}
>>> t = (range(3), range(10, 13))
>>> d[t] = 11
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list objects are unhashable
>>>

8voto

Anurag Uniyal Puntos 31931

Yo uso tupla mucho tiempo como dict clave por ejemplo,

  • Yo los uso cuando tengo que crear una clave única de varios valores, por ejemplo,

    basado en first_name, last_name clave podría ser clave = '%s_%s'%(first_name, last_name) , pero la mejor manera es key = (first_name, last_name) porque

    1. Es más legible, más corto y menos de cálculo
    2. Es más fácil recuperar los valores individuales
    3. Lo que es más importante key = '%s_%s'%(first_name, last_name) que es malo y no puede dar las claves únicas para todos los valores de first_name y last_name por ejemplo, cuando los valores contengan _
  • Almacenamiento en caché de los resultados de una función

    def func(a1, b1):
        if (a1,b1) in cache: return cache[(a1,b1)]
        ...
    

5voto

jathanism Puntos 15208

He utilizado tuplas como claves del diccionario en la aplicación que compara los dispositivos de red por ubicación geográfica. Puesto que los dispositivos son nombrados de manera similar para cada ubicación, proporciona una forma natural para saber si un dispositivo de coincidencia de que el emparejamiento se ha visto sin embargo, mientras que el procesamiento de los múltiplos.

es decir,

seen = {}
seen[('abc', 'lax')] = 1
seen[('xyz', 'nyc')] = 1

2voto

tkerwin Puntos 3876
a[("John", "Doe")] = "123 Fake Street"

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X