Comments on: Aller plus loin avec les hash maps en Python http://sametmax.com/aller-plus-loin-avec-les-hash-maps-en-python/ Du code, du cul Mon, 28 Oct 2019 11:54:55 +0000 hourly 1 https://wordpress.org/?v=4.9.7 By: Mokkori San http://sametmax.com/aller-plus-loin-avec-les-hash-maps-en-python/#comment-188325 Wed, 19 Jul 2017 21:18:05 +0000 http://sametmax.com/?p=11217#comment-188325 Bon le billet à déjà une paire d’années, mais pour le newbie que je suis moins maintenant grâce à ce site, je me suis dit que j’allais essayer de faire un commentaire intelligent qui aurait pu m’aider au moment où j’ai découvert les merveilles du module collections.

Je me demandais récemment pourquoi j’avais utiliser setdefault() au lieu d’un defaulftdict, j’ai compris que j’avais commis une erreur de jeunesse (ah quelques mois en arrière j’étais pur et innocent … ah on me dit que non) pour deux raisons, la première étant la vitesse et la deuxième, plus fondamentale je trouve, je l’ai trouvé en cherchant sur le net :

You have to look at how the returned value is going to be used in the code. When you later look up a missing key, do you want an empty list, or a KeyError?

C’était dès lors clair pour moi, j’ai dû tirer un trait sur setdefault().

PS : J’ai trouvé ça sur stupidpythonideas.blogspot.fr.

PS 2: Une traduction pourrait-être : “Vous devez regarder comment la valeur retournée (par dictionnaire[clé]) va être utilisée plus tard dans le code. Quand vous rencontrerez une clé manquante, voulez-vous une liste vide (la valeur par défaut dans l’exemple), ou une KeyError ?”

]]>
By: Alex http://sametmax.com/aller-plus-loin-avec-les-hash-maps-en-python/#comment-151493 Tue, 09 Dec 2014 10:01:15 +0000 http://sametmax.com/?p=11217#comment-151493 sympa le ticket
Petit update pour ceux qui passeront plus tard:
pip install sortedcontainers au lieu de pip install sorted_container

]]>
By: Duckie http://sametmax.com/aller-plus-loin-avec-les-hash-maps-en-python/#comment-87536 Mon, 07 Jul 2014 09:55:23 +0000 http://sametmax.com/?p=11217#comment-87536 Hello

Je suis d’accord avec Sam sur les array en PHP, c’est vraiment bâtard comme outil.

En Lua, c’est encore pire ! Les tables peuvent contenir à la fois une partie indicée sur des entiers et une autres indicée sur des clés. Pour pouvoir compter les éléments, il y a plusieurs techniques aussi, dont celle de stocker une clé qui s’appelle “n”, sous certaines conditions, parfois il faut écrire une boucle à la main. Et pour ne rien arranger, les indices commencent à 1 au lieu de zéro (sous prétexte, selon la doc que c’est plus intuitif !!!). Il faut mettre ça en regard de la légèreté du moteur d’exécution, mais pour la propreté LUA peut repasser.

Pour ce qui est de la complexité d’accès dans une hashmap, cela est commun à toutes les hashmaps quel que soit le langage : le terme “hashmap” désigne bien la technique d’implémentation et pas le fait d’associer une valeur à une clé.

]]>
By: Sam http://sametmax.com/aller-plus-loin-avec-les-hash-maps-en-python/#comment-81765 Thu, 03 Jul 2014 00:08:08 +0000 http://sametmax.com/?p=11217#comment-81765 Moi qui allait me mettre au Lua…

]]>
By: Luthaf http://sametmax.com/aller-plus-loin-avec-les-hash-maps-en-python/#comment-81626 Wed, 02 Jul 2014 22:30:51 +0000 http://sametmax.com/?p=11217#comment-81626

Dans aucun autre langage on a une structure de base à qui on demande de faire tout ce bordel. C’est l’API là plus mal foutu de toutes les structures de données que je connaisse.

Et le Lua alors ? Les tables font à la fois liste, dico, structure de données et permettent même de créer des classes !

Mais contrairement à PHP, l’API est certes minimaliste et bien faite.

[HS] C’est quoi ce trombone qui me juge pendant que j’écris mon message ? Si je fait du LaTeX, c’est bien pour ne pas voir sa figure ![/HS]

]]>
By: Batisteo http://sametmax.com/aller-plus-loin-avec-les-hash-maps-en-python/#comment-80742 Wed, 02 Jul 2014 10:09:09 +0000 http://sametmax.com/?p=11217#comment-80742 Deux mini-coquilles :

[…] utilisent le dictionnaire pour montrer une forme ou une autre de compteur.

Rajouter le retour de c[‘z’] :

»» c['z'] += 1 # pas de KeyError
»» c['z']
1 # <--- Oh, un un !
»» c.most_common(2) # et en bonus
[('b', 3), ('a', 2)]

Et pour faire mon fourreur de drosophiles :

Inline comments should be separated by at least two spaces from the statement.

Génial le Clippy ! :·D

]]>
By: cladmi http://sametmax.com/aller-plus-loin-avec-les-hash-maps-en-python/#comment-80559 Wed, 02 Jul 2014 06:39:29 +0000 http://sametmax.com/?p=11217#comment-80559 En effet je connaissais le get(val, default) mais le ‘setdefault‘ j’étais passé à côté. Les premières fois où je l’ai vu, je m’étais dis que c’était en rapport avec les defaultdict…

C’est un pattern tellement récurent en plus.

Merci pour ce rappel, on commence à tout connaître, mais on se fait toujours surprendre par un truc basique de l’espace qui nous change la vie.

]]>
By: Sam http://sametmax.com/aller-plus-loin-avec-les-hash-maps-en-python/#comment-79991 Tue, 01 Jul 2014 17:03:20 +0000 http://sametmax.com/?p=11217#comment-79991 Pour la complexité des opérations sur les types de base en Python, la référence est ce document : https://wiki.python.org/moin/TimeComplexity

On note que le cas moyen est O(1), mais on peut avoir un extrema maximum à O(n). A noter que N est le nombre max d’élément qu’il y a eu dans le dict, pas la taille de la valeur hashée.

Pour ce qui est de l’implémentation, les valeurs sont dans un array, et l’indice de cet array est calculé via un hash de la valeur. Une bonne explication ici :

http://www.laurentluce.com/posts/python-dictionary-implementation/

]]>
By: Azerty http://sametmax.com/aller-plus-loin-avec-les-hash-maps-en-python/#comment-79973 Tue, 01 Jul 2014 16:37:24 +0000 http://sametmax.com/?p=11217#comment-79973

L’intérêt du dictionnaire étant qu’accéder à une clé est très rapide (c’est une opération O(1)), tout comme vérifier qu’une clé est présente dans le dico :

O(1) ? je suis curieux de savoir comment.

]]>
By: Sam http://sametmax.com/aller-plus-loin-avec-les-hash-maps-en-python/#comment-79264 Tue, 01 Jul 2014 07:40:01 +0000 http://sametmax.com/?p=11217#comment-79264 Pas besoin de compiler l’extension quand tu pip install.

Ca veut dire :

– si ton hosting te le permet pas la compilation, tu peux l’utiliser
– tu peux l’essayer en copiant juste le dossier du module, sans avoir à l’installer
– tu peux fournir un programme stand alone multi plateforme avec cette lib très facilement
– si tu veux l’utiliser sur ta machine, pas besoin d’installer gcc et les headers python
– tu peux l’utiliser sur des plateformes alternatives sans effort (exemple, android dans kivy)
– marche sur d’autres implémentations de python (pypy, jython, ironpython, brython, etc)

Si le but principal de ta lib est la perf (comme numpy ou pypy) et qu’utiliser le C est le seul moyen d’y arriver, alors utiliser une extension C est une bonne chose, à condition de fournir un bon support de binaires compilés pour pas mal de plateformes. Mais si tu peux répondre à ton cahier des charges en pur Python, alors c’est idéal.

]]>