Bonjour,
Je vous exposerais donc les mails passés sur Gmane (gmane.comp.python.french) [1]
Mail d’origine
Bonjour,
Je suis nouveau sur cette liste et j’espère trouver de l’aide mais aussi aider d’autre si j’en ai la possibilité . :-)
Alors, et cette question à 100 points ?!
Context :
*******Je développe actuellement une version refactoré de Sbackup ( que j’ose appeler OOP ... mais là n’est pas le débat ) http://sbackup.sourceforge.net/HomePage . Dans le cadre de cette application , pour une gestion efficace de la mémoire , j’ai imaginé une structure, dérivant de la classe "dict" . Pour plus d’info lire http://tinyurl.com/2j8gun
Problème :
*********Si vous voulez tester la classe SBdict vous verrez qu’elle se comporte comme un dictionnaire. Dans cette optique, je voudrais surcharger aussi la méthode "iteritems()" . Et c’est là qu’est le problème : Le principe serait le suivant, j’itère en profondeur jusqu’à tomber sur "None" puis j’itère 1 fois en -largeur- (je ne sais pas exactement quel terme utilisé) puis de nouveau en profondeur et ainsi de suite .
Le problème c’est que je n’arrive pas à trouver de documentation sur les itérateurs qui vont dans ce sens, aussi je me tourne vers vous pour éclairer ma lanterne :-)
Cordialement
wattazoum
Réponse un jour après
il suffit de faire une méthode iteritems récursive (ce qui est classique dans le cas de parcours d’arbres comme celui que tu présentes). La condition d’arrêt de récursion sera la présence d’un None.
exemple (sous forme de fonction)
import os
def iteritems(sbdict, _path=None):
if _path is None:
_path = []
for dirname,(props, contents) in sbdict.iteritems():
_path.append(dirname)
if contents is None:
yield os.sep.join(_path)
_path.pop()
else:
for path in iteritems(contents, _path):
yield path
for path in iteritems(d):
print pathCa répond à ta question ?
—
Alexandre Fayolle LOGILAB, Paris (France)
Formations Python, Zope, Plone, Debian :
http://www.logilab.fr/formations
Développement logiciel sur mesure : http://www.logilab.fr/services
Informatique scientifique : http://www.logilab.fr/science
Reprise et maintenance de sites CPS : http://www.migration-cms.com/
Merci Alexandre :-)
Comme quoi, internet et les communautes sont une grande source de savoir et de richesse.