collections.OrderedDict
est une structure de données que j’utilise de plus en plus, surtout que sa réécriture en C en 3.5 lui donne des performances décentes.
Néanmoins, il n’y a pas dans l’API de moyen de récupérer le premier ou le dernier élément inséré dans dico. Il y a bien popitem()
, mais ça retire l’élément du dictionnaire, et c’est pas forcément ce qu’on veut.
Heureusement OrderedDict
est un itérable, et implémente __reversed__
, et on peut donc utiliser les outils suivant our récupérer les extrémités avec une perf 0(1):
>>> from collections import OrderedDict >>> d = OrderedDict.fromkeys('azerty') >>> next(iter(d.items())) # premier élément 'a' >>> next(reversed(d.items())) # dernier élément 'y' |
Après l’implémentation de OrderedDict
reste une liste doublement chainée, et on ne peut donc pas récupérer un élément à un index arbitraire sans le parcourir à la main…
La complexité ne serait pas plutôt O(n) ? Surtout pour le reversed()
Non c’est une liste doublement chainée, le dico a une références sur les deux extrémités de la liste. Le reversed retourne une vues itérable, non l’intégralité du dico inversé.
merci !
Fix typo ligne 1, il manque le ‘t’ à OrderedDict
Merci
Merci! Merci pour l’image associée à l’article: une vraie pépite…
C’est cool. Mais sur la dernière doc (3.5.1°, il y a un exemple avec
move_to_end(key, last=True)
En gros, il est possible de déplacer une clé vers la fin du dico (c’est la valeur last par défaut) ou au début (si last est False).
Donc, je suppose que cette ingénieuse manipulation proposée ici n’a plus lieu d’être, du moins depuis la version 3.2 de python, non ?
move_to_end permet de déplacer une clé, non récupérer la valeur liée à cette clé.
Mmh… plus beaucoup de mouvement ici…
Vous êtes partis en vacances ? vous travaillez comme des dingues ?
Ou alors vous êtes déja devenus les maîtres du monde et vous en avez plus rien a foutre ?
Vous me manquez les gars.
Max vient juste de rentrer d’asie, et moi j’ai une baisse de motiv sérieuse sur la programmation en ce moment. C’est une période de flottement.
Je m’ennuie sans vos news ! Mes flux RSS sont pauvres ;), bon faut dire qu’il n’y a pas beaucoup d’actu ou de technos qui font bander en ce moment. Avec cette censure de merde on a plus le goût à rien.
@sam: je rappelle que le slogan du site c’est:
Sauf si tu développe des algo pour la partie en gras, y a peut-être moyen d’être motivé ?
:) Ouai en plus j’ai des tas d’articles à moitié écrits, pas finis, etc. J’arrive juste pas à m’y mettre. J’ai l’inspiration. J’ai tout ce qu’il faut. Sauf la motiv.
C’est un bon sujet la motivation.
Il m’arrive souvent de tourner au tour du sujet pendant aller, 1 semaine.
Je réfléchis au problème, j’élabore des solutions, tout ça dans ma tête.
Je trouve toujours autre chose à faire, des clients qui appellent, des bugs à réparer, un truc à tester, etc… mais toujours pas coder la solution à ce foutu problème.
Le cerveau travaille en tache de fond. Puis tout d’un coup, je prends conscience que le puzzle est assemblé et je code.
1ère version marche plutôt bien, j’itère 3 fois, en 24h, problème résolu.
Coder c’est un art, ça sera jamais un processus mécanique.
Je suis toujours motivé pour faire quelque chose, mais quand c’est bancal, ça donne pas envie, c’est la ou c’est important de laisser le temps au temps pour que le cerveau y travaille en tache de fond.
Je suis certain que si je m’étais imposé d’écrire 10 lignes de code / jour pendant une semaine, j’aurais écrit un code beaucoup plus mauvais que celui écrit en 24h après 1 semaine de maturation inconsciente.
Donc Sam, laisse le temps faire son oeuvre.
Je suis certain que quand le moment arrivera, tu balanceras 10 articles d’un coup.
Comme je suis sympa et que je vois que vous vous ennuyez, je vous mets un petit lien histoire de s’amuser un peu :
https://isc.sans.edu/diary.html?n&storyid=21297
Pour retrouver la motivation, rien de tel qu’une petite escort bien ficellée ;)