2017-10-09 2 views
0

J'ai appris que le dictionnaire utilise le hachage pour ses clés. Supposons que j'ai un dictionnaire défini commeComment accéder à une valeur via la "valeur de hachage de la clé" dans un dictionnaire?

dict = { 1.1 : 'hello', 2 : 'bye' } 

Je peux obtenir bonjour comme ça

dict.get(1.1) 

Ce que je veux faire est d'obtenir le « bonjour » par la valeur de hachage de la clé, quelque chose comme

dict.get(hash(1.1)) 

Quelque chose comme ça? Comment puis-je faire ceci? Je veux vérifier si la valeur de hachage est calculée ou non par python? Si elle est réellement générée que je peux directement aller à cette adresse et obtenir la valeur de «bonjour», non?

+4

Votre prémisse est erronée car vous n'êtes pas sûr de trouver une valeur unique étant donné le hachage d'une clé. Il peut y avoir des collisions de sorte qu'il peut y avoir plusieurs valeurs pour une seule clé, à quel point vous devez effectuer une recherche secondaire dans ce compartiment. Vous devez donc effectuer une recherche à l'aide de la clé, car c'est la seule façon de trouver la valeur correspondante unique. [Voir ici] (https://stackoverflow.com/questions/9010222/how-can-python-dict-have-multiple-keys-with-same-hash) – CoryKramer

+0

Une valeur de hachage peut être associée à plusieurs objets. Vous supposez que le hachage est toujours mappé en tête-à-tête. –

+0

@CoryKramer Ce n'est pas grave, puis-je obtenir tous les objets mappés à cette valeur de hachage dans le dictionnaire que j'ai créé? Je ne veux pas une valeur unique, je veux juste voir tous les objets mappés à ce hachage? –

Répondre

0

Lorsqu'un dictionnaire stocke une valeur, il n'est pas garanti de la stocker en tête-à-tête. C'est pourquoi accéder et stocker dans un dictionnaire est O (n) la complexité du temps le plus défavorable - ce qui signifie qu'il est possible que lors du stockage ou de la récupération d'un dictionnaire, les valeurs pointent sur le même hachage n fois (la longueur de l'entrée). Donc, chaque récupération/stockage pourrait nous obliger à passer par toutes les autres valeurs avant d'obtenir ce dont nous avions besoin (comme lorsque nous obtenons un élément de la dernière position dans un tableau et nous avons commencé à chercher à la première position). Par conséquent, vous ne pourrez pas récupérer «bonjour» exactement, avec une certitude certaine. Également quelque chose comme:

dict.get(hash(1.1)) 

Serait obtenir l'indice de hachage 1.1, qui est entièrement différent de l'indice de 1.1.

+0

Eh bien dans ce cas, puis-je obtenir tous les objets dans mon dictionnaire, si j'appelle une recherche d'objet associé à ce hachage? Dans mon cas, puis-je obtenir «bonjour» et «au revoir» les deux (pire des cas) si je recherche la valeur associée à ce hachage? –

+0

Je sais que python recherche la valeur de hachage et s'il obtient une collision qu'il effectue un autre niveau de vérification de hachage, tout ce que je veux, c'est me renvoyer les valeurs du premier hachage, même si tous les éléments de mon dictionnaire sont mappés valeur? –

+0

Vous pourriez très bien faire cela si vous avez créé votre propre structure de données d'une carte de hachage. Ce qui si c'est pour une tâche qu'ils ont probablement l'intention de faire pour vous. Mais en utilisant le dictionnaire qui est intégré - je ne suis pas entièrement sûr si c'est possible. – Rrr