OVH Cloud OVH Cloud

[NewBie] Hashing Table

21 réponses
Avatar
lesouriciergris
Salut à tous,

Tsssss ....
j'essaye porter un programme PERL en Python.
Dans ce programme je dispose d'une table de hashage dont les éléments
pointent sur une autre table de hashage ce qui nous donne celà :
$tabcode{cle}{duree}=valeur;

J'ai bien essayé tabcode[key][duree]=valeur; mais que neni il n'en veut
pas ...

Quelqu'un pourrait il m'aider à apprivoiser la bête ?

Merci

--
\_@°> Eric BERTHOMIER / Le Sourcier Gris
http://lesouriciergris.free.fr http://troll.west.free.fr

10 réponses

1 2 3
Avatar
lesouriciergris
wrote:
Salut à tous,

Tsssss ....
j'essaye porter un programme PERL en Python.
Dans ce programme je dispose d'une table de hashage dont les éléments
pointent sur une autre table de hashage ce qui nous donne celà :
$tabcode{cle}{duree}=valeur;

J'ai bien essayé tabcode[key][duree]=valeur; mais que neni il n'en veut
pas ...

Quelqu'un pourrait il m'aider à apprivoiser la bête ?

Merci



Merci à tous pour toutes ces réponses qui m'ont débloqué dans mon codage.

--
_@°> Eric BERTHOMIER / Le Sourcier Gris
http://lesouriciergris.free.fr http://troll.west.free.fr

Avatar
Jean-michel
Pardonnez mon outrecuidance, mais quel est l'intérêt par rapport à :
tabcode[cle]={duree:valeur}
qui crée aussi l'entrée inexistante ?

Où alors, il me manque un neurone quelque part...
jean-michel

Il faut d'abord initialiser le dictionnaire :
tabcode = {}

puis pour chaque élément :
tabcode.setdefault(cle, {})[duree] = valeur

'setdefault' a la bonne idée de créer l'entrée du dictionnaire quand elle
n'existe pas. On lui donne donc un autre dictionnaire par défaut.

En espérant que c'est cela qui convient,

Amaury.


Avatar
Paul Gaborit
À (at) Tue, 15 Mar 2005 17:48:06 +0100,
"Jean-michel" écrivait (wrote):
Pardonnez mon outrecuidance, mais quel est l'intérêt par rapport à :
tabcode[cle]={duree:valeur}
qui crée aussi l'entrée inexistante ?


Si l'entrée est inexistante, c'est bon.
Si elle existait déjà, on perd son ancien contenu.

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>

Avatar
kaerbuhez
Pardonnez mon outrecuidance, mais quel est l'intérêt par rapport à :
tabcode[cle]={duree:valeur}
qui crée aussi l'entrée inexistante ?

Où alors, il me manque un neurone quelque part...
jean-michel


Il faut d'abord initialiser le dictionnaire :
tabcode = {}

puis pour chaque élément :
tabcode.setdefault(cle, {})[duree] = valeur

'setdefault' a la bonne idée de créer l'entrée du dictionnaire quand elle
n'existe pas. On lui donne donc un autre dictionnaire par défaut.

En espérant que c'est cela qui convient,

Amaury.




L'intêret c'est d'avoir une implémentation utilisable dans un domaine ou

plusieurs paires <durées, valeur> peuvent correspondre à une seule clé.
Tu saisis ?
Allez, tu es pardonné ... mais ne recommence pas.
;-)))


Avatar
Jean-michel
Je continue à ne pas capter.
Dans l'exemple (faite avec python 2.3.4):
#--------------------------
tabcode = tabcode2 = {}
cle= 'k1'
duree= 11
valeur= 100
tabcode.setdefault(cle, {})[duree] = valeur
tabcode2[cle]={duree:valeur}
cle= 'k1'
duree= 22
valeur= 200
tabcode.setdefault(cle, {})[duree] = valeur
tabcode2[cle]={duree:valeur}
print '-'*20
print tabcode
print tabcode2

#--------------------------

J'obtiens la même chose dans tabcode et tabcode2, à savoir:
{'k1': {22: 200}}
{'k1': {22: 200}}

Je n'arrive pas à voir un cas ou "tabcode.setdefault(cle, {})[duree] =
valeur" donnera autre chose que "tabcode[cle]={duree:valeur}", et pour moi,
la deuxième écriture est plus simple.
++

L'intêret c'est d'avoir une implémentation utilisable dans un domaine ou
plusieurs paires <durées, valeur> peuvent correspondre à une seule clé. Tu
saisis ?


Avatar
Jean-michel
L'entrée existante est aussi effacée dans le cas de
"tabcode[cle]={duree:valeur}".
Voir l'exemple (faite avec python 2.3.4):
#--------------------------
tabcode = tabcode2 = {}
cle= 'k1'
duree= 11
valeur= 100
tabcode.setdefault(cle, {})[duree] = valeur
tabcode2[cle]={duree:valeur}
cle= 'k1'
duree= 22
valeur= 200
tabcode.setdefault(cle, {})[duree] = valeur
tabcode2[cle]={duree:valeur}
print '-'*20
print tabcode
print tabcode2

#--------------------------
qui donne bien:
{'k1': {22: 200}}
{'k1': {22: 200}}

"Paul Gaborit" a écrit dans le message de
news:

À (at) Tue, 15 Mar 2005 17:48:06 +0100,
"Jean-michel" écrivait (wrote):
Pardonnez mon outrecuidance, mais quel est l'intérêt par rapport à :
tabcode[cle]={duree:valeur}
qui crée aussi l'entrée inexistante ?


Si l'entrée est inexistante, c'est bon.
Si elle existait déjà, on perd son ancien contenu.

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>



Avatar
Eric Brunel
On Thu, 17 Mar 2005 11:16:53 +0100, Jean-michel wrote:
L'entrée existante est aussi effacée dans le cas de
"tabcode[cle]={duree:valeur}".
Voir l'exemple (faite avec python 2.3.4):
#--------------------------
tabcode = tabcode2 = {}


Ne jamais faire ça! Cette instruction affecte le *meme* dictionnaire aux deux variables tabcode et tabcode2. Ensuite, modifier l'un modifiera l'autre.

Exemple:
a = b = {}
a['toto'] = 1
a
{'toto': 1}



b
{'toto': 1}




Si tu remplaces la ligne dans ton code par:
tabcode, tabcode2 = {}, {}

ça devrait tout de suite mieux marcher...

HTH
--
python -c 'print "".join([chr(154 - ord(c)) for c in "U(17zX(%,5.z^5(17l8(%,5.Z*(93-965$l7+-"])'



Avatar
Amaury Forgeot d'Arc
Ton exemple contient une erreur.
Si on ne garde que 2 lignes de ton message :

tabcode = tabcode2 = {}
...

J'obtiens la même chose dans tabcode et tabcode2


Et c'est normal !

Essaie donc en construisant deux dictionnaires différents:

tabcode = {}
tabcode2 = {}


Amaury

Avatar
Paul Gaborit
À (at) Thu, 17 Mar 2005 11:16:49 +0100,
"Jean-michel" écrivait (wrote):
Je continue à ne pas capter.


Un petit script pour illustrer le problème :

a = {}
cle = 'kle'
a[cle] = {'v':'v'}
print a
a.setdefault(cle, {})['w'] = 'w'
print a
a[cle] = {'x':'x'}
print a

Et la sortie correspondante :

{'kle': {'v': 'v'}}
{'kle': {'w': 'w', 'v': 'v'}}
{'kle': {'x': 'x'}}

Le 'setdefault' permet de ne pas perdre les clés et les valeurs déjà présentes
dans le dictionnaire (a[cle] - pas a). Dans l'exemple, l'ajout de la clé 'w'
ne supprime pas la clé 'v' qui existait déjà. Alors que l'ajout de la clé 'x'
supprime les deux précédentes ('w' et 'v').

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>

Avatar
Jean-michel
Des baffes, je mérite des baffes...

"Eric Brunel" a écrit dans le message de news:

tabcode = tabcode2 = {}


Ne jamais faire ça! Cette instruction affecte le *meme* dictionnaire aux
deux variables tabcode et tabcode2. Ensuite, modifier l'un modifiera
l'autre.



1 2 3