IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

comment affecter un dict


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut comment affecter un dict
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    j={"id":"1","children":[{"id":"2","children": [{"id":"3","name":"3"}],"name":"2"},{"id":"4","name":"4"}],"name":"1"} 
     
    def searchDict(obj, id):
        if obj['id']==id:
            print obj #{"id":"3","name":"3"}
            return obj.copy()
        else:
            if 'children' in obj:
                for child in obj['children']:
                    searchDict(child, id)
     
    jj = searchDict(j, "3")
    print jj #  ----> None ?
    bonjour comment recupérer {"id":"3","name":"3"} svp?

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Quand je vois un dico comme ça, je prend mon code, je le jette et je revois l'implémentation de mon algo

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Quand je vois un dico comme ça, je prend mon code, je le jette et je revois l'implémentation de mon algo
    t'as raison c'est l'algo qui est mauvais

    en fait j'aimerais un algo qui est capable de fusionner

    par exemple

    à

    j={"id":"1","children":[{"id":"2","children": [{"id":"3","name":"3"}],"name":"2"},{"id":"4","name":"4"}],"name":"1"}

    capable d'ajouter au bon endroit

    {"id":"3","children": [{"id":"7","name":"7"}],"name":"3"}

    je sais pas trop comment faire parceque j'aimerais parcourir le premier Dict, mais si la méthode est récursive je vais perdre la référence au Dict initial, et je vais ajouter mon second Dict à un autre Dict sans avoir modifier l'initial
    je sais pas si c'est très clair

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Donne nous plutôt ce que tu as en entrée (par exemple une chaine, un nombre, etc...) et ce que tu veux en sortie.

    Parce-que arriver à ce genre de résultat ci-dessous, c'est affreusement moche, à moins de ne pas avoir le choix

    {"id":"3","children": [{"id":"7","name":"7"}],"name":"3"}
    C'est toujours aussi affreux

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    ok plus simplement, j'ai des Dict en forme d'arbre

    root={"id":"1","children":[{"id":"2","children": [{"id":"3"}]},{"id":"4"}]}

    temp = {"id":"3","children": [{"id":"12"}]}

    je voudrais pouvoir faire

    add(root,temp)

    root -> {"id":"1","children":[{"id":"2","children": [{"id":"3","children": [{"id":"12"}]}]},{"id":"4"}]}

    etc ..
    add(root, {"id":"3","children": [{"id":"22"},{"id":"23"}]}
    root -> {"id":"1","children":[{"id":"2","children": [{"id":"3","children": [{"id":"12"},{"id":"22"},{"id":"23"}]}]},{"id":"4"}]}

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    ou plutot non

    j'aimerais en fait pouvoir afficher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Node:
        def __init__(self, name, parent=None, size=0 ):
            self.id = name
            self.size = size
            self.total_size = size
            self.parent = parent
            self.children = []
    sur le format json précedent

    j'ai un root = Node('1')
    qui possède en children des Node('2', root) et Node('4', root)
    et Node('2', root) a dans son children Node('3', ...)

    comment ecrire une méthode printNode dans Node

    pour avoir root.printNode() donnant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"id":"1","children":[{"id":"2","children": [{"id":"3"}]},{"id":"4"}]}

Discussions similaires

  1. [VB.NET] Comment affecter la transparence à 1 UserControl ?
    Par Legli dans le forum Windows Forms
    Réponses: 6
    Dernier message: 14/02/2006, 09h47
  2. Comment affecter un array à un element select
    Par ouioui2000 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/01/2006, 12h26
  3. Comment affecter 2 @IP a 1 seule interface réseau
    Par wodel dans le forum Réseau
    Réponses: 5
    Dernier message: 30/11/2005, 14h11
  4. Réponses: 5
    Dernier message: 18/11/2005, 22h11
  5. Réponses: 5
    Dernier message: 14/10/2005, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo