J'ai une structure de dictionnaire imbriquée python qui ressemble à celle ci-dessous. Ceci est un petit exemple mais j'ai des exemples plus grands qui peuvent avoir différents niveaux d'imbrication.Chemin d'extraction pour chaque noeud terminal
De là, j'ai besoin d'extraire une liste avec:
- Un enregistrement pour chaque noeud feuillettent borne
- Une chaîne, une liste ou un objet représentant le chemin logique menant à ce noeud
- (par exemple, 'nodeid_3: X et X < 0,500007 0,279907 <')
J'ai passé la plus grande partie de ce week-end en essayant d'obtenir quelque chose de travail et je réalise à quel point je suis avec récursivité.
# Extract json string
json_string = booster.get_dump(with_stats=True, dump_format='json')[0]
# Convert to python dictionary
json.loads(json_string)
{u'children': [{u'children': [
{u'cover': 2291, u'leaf': -0.0611795, u'nodeid': 3},
{u'cover': 1779, u'leaf': -0.00965727, u'nodeid': 4}],
u'cover': 4070,
u'depth': 1,
u'gain': 265.811,
u'missing': 3,
u'no': 4,
u'nodeid': 1,
u'split': u'X',
u'split_condition': 0.279907,
u'yes': 3},
{u'cover': 3930, u'leaf': -0.0611946, u'nodeid': 2}],
u'cover': 8000,
u'depth': 0,
u'gain': 101.245,
u'missing': 1,
u'no': 2,
u'nodeid': 0,
u'split': u'X',
u'split_condition': 0.500007,
u'yes': 1}
C'est vraiment sympa! Je suis capable d'imprimer mais le passage à "yield" ne retourne rien si je le répète sur le générateur résultant. Pourriez-vous ajouter la version rendement avec l'appel associé (dans le cas où j'ai réussi à gâcher ça)? – Chris
@Chris J'ai ajouté un générateur 'iter_path'. –
Cela fonctionne :). 'find_path' doit être changé en' iter_path' dans les lignes commentées, mais c'est sympa de votre part de fournir les deux versions en premier lieu. Merci, cela m'a économisé une tonne de temps! – Chris