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 :

Manipulation d'un dictionnaire


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut Manipulation d'un dictionnaire
    Bonjour,

    J'ai un dictionnaire d'objet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {'cellule1': <main.ElementaryCell object at 0xb7b778ec>, 'cellule2': <main.ComplexCell object at 0x94488cc>, 'cellule3': <main.ComplexCell object at 0x9446c2c>, 'cellule4': <main.BasicCell object at 0x94468ec>}
    et j'aimerais faire une boucle récurssif pour traiter chaque cas, d'un coté les cellules élémentaires et de l'autre les cellules complexes.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 067
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dir(dict)
    print dict.la_methode_qui_semble_interessante.__doc__

  3. #3
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut

    Allez, un petit complément tout de même :

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut
    j'ai pas compris ton code Josmiley:

    même apres avoir regardé la documentation, pourrais tu me donner des eclaircissement stp

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut
    j'ai pas compris ton code Josmiley:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dir(dict)
    print dict.la_methode_qui_semble_interessante.__doc__
    même apres avoir regardé la documentation, pourrais tu me donner des eclaircissement stp

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut
    ce qui me pose probleme c'est pas de faire une boucle mais plutot de reconnaitre les cellules élémentaires et les cellules complexes pour faire un traitement différents par la suite dans ma boucle

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 067
    Par défaut
    dans le console python tu tapes ou dir({}) par exemple et tu obtiens la liste des méthodes sur les dictionnaires ...
    leurs noms sont assez explicites.
    pour savoir ce que fait une de ces méthodes tu tapes ensuite (par exemple pour itervalues):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print dict.itervalues.__doc__
    ou {}.itervalues.__doc__
    et tu obtiens le docstring de la méthode ...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut
    ok je vois merci...je vais voir si sa peut m'aider dans mes recherches

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut
    je vois toujours pas comment résoudre mon probleme, je me demande si c'est possible d'y arriver avec les informations concernant le dictionnaire

  10. #10
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Citation Envoyé par kali38 Voir le message
    ce qui me pose probleme c'est pas de faire une boucle mais plutot de reconnaitre les cellules élémentaires et les cellules complexes pour faire un traitement différents par la suite dans ma boucle
    Blague à part, tu as la réponse parmi les lien donnés, celui-ci pour être plus exact:
    Allez quoi, c'est pas bien compliqué... si tu trouves vraiment pas, je suis sûr l'un d'entre nous te donnera la réponse, mais tu te sentiras tout couillon, tellement la réponse est là, juste sous tes yeux, en train de hurler de tout son être (ou plutôt non-être)

    Allez, regardes bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {'cellule1': <main.ElementaryCell object at 0xb7b778ec>, 'cellule2': <main.ComplexCell object at 0x94488cc>, [...], 'cellule4': <main.BasicCell object at 0x94468ec>}

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut
    Pff je suis trop nul alors ....J'ai testé un programme mais sa ne m'avance pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class Personne(object): 
    	def __init__(self):
    		self.nom = "Dupont"
     
    class Age(object): 
    	def __init__(self):
    		self.age = 26
     
    def toto():
    	dico = {}
    	dico["P"] = Personne()
    	dico["A"] = Age()
    	for element in dico:
    		a = type(element, (object,), dico)
    		print a

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut
    j'ai testé un programme qui à l'air de marcher:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class Personne(object): 
    	def __init__(self):
    		self.nom = "Dupont"
     
    class Age(object): 
    	def __init__(self):
    		self.age = 26
     
    def toto():
    	dico = {}
    	dico["P"] = Personne()
    	dico["A"] = Age()
    	for element in dico:
    		if type(dico[element]) == type(Personne()):
    			print "ok"
    est-ce-que quelqu'un pourrait me dire si c'est convenable de l'écrire comme cela? merci

  13. #13
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 067
    Par défaut
    ou bien ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if type(dico[element]) == Personne:
    okay, j'avais compris que le problème était sur l'extractions des valeurs.

  14. #14
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    He bah voilààà... alors ? Etait-ce si dur ?

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut
    Lol soyez un peu indulgent avec moi jsuis débutant en programmation lol.....

  16. #16
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonsoir,

    Ils sont joueurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    class Personne(object): 
        pass
     
    class Age(object): 
        pass
     
    dico = {'cellule1': Personne(), 'cellule2': Age(), 'cellule3': Personne()}
     
    for elem in dico:
        if type(dico[elem]) == Personne:
            print(elem + ' = Personne') # Sorry pour la concaténation... Je ne voulais par rajouter le traitement des string.
     
    # Ou encore
     
    for elem in dico:
        if isinstance(dico[elem], Personne):
            print(elem + ' = Personne')
    L'info est dans l'instance.

    @+

  17. #17
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Très juste , mais quelques précisions deviennent alors nécéssaires : il y a une différence cruciale entre type() et isinstance(), le code parlera mieux que moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >>> class A(object):pass
     
    >>> class B(A):pass
     
    >>> a=A()
    >>> b=B()
    >>> type(a) == A
    True
    >>> type(b) == A
    False
    >>> isinstance(a,A)
    True
    >>> isinstance(b,A)
    True
    type(instance)==UneClasse est très strict, il retournera vrai si l'instance est de la classe testée, et seulement cette classe, qu'importe les ancêtres de cette dernière.

    isinstance(instance, UneClasse) en revanche est beaucoup plus souple, et vérifie que la classe testée, à défault d'être la génitrice de l'instance, fait au moins partie des ancêtres de cette dernière.

    Fort de cette différence, et du fait que quasiment tous les objets en python ont la classe 'object' comme ancêtre, on peut aisément constater la chose suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> isinstance(5,object)
    True
    >>> isinstance(str,object)
    True
    Il est donc important de distinguer la différence entre type() et isinstance(), afin de faire le choix le plus adapté.

  18. #18
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Citation Envoyé par N.tox Voir le message
    du fait que quasiment tous les objets en python ont la classe 'object' comme ancêtre
    En effet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> class A:
    ...     pass
    ... 
    >>> locals()['a']
    <__main__.A instance at 0xb77fdacc>
    >>> class A(object):
    ...     pass
    ... 
    >>> a = A()
    >>> locals()['a']
    <__main__.A object at 0xb7584c8c>
    Mais en fait cela limite type aux classes new-style.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> class A:
    ...     pass
    ... 
    >>> a = A()
    >>> type(a) == A
    False
    >>> class A(object):
    ...     pass
    ... 
    >>> a = A()
    >>> type(a) == A
    True
    Note inutile pour le code mais a prendre en compte.

    @+

  19. #19
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Maintenant si on ne parle que de classes...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    >>> class A:
    ...     pass
    ... 
    >>> class B(A):
    ...     pass
    ... 
    >>> class C(object):
    ...     pass
    ... 
    >>> class D(C):
    ...     pass
    ... 
    >>> a = A()
    >>> a.__class__ == A
    True
    >>> a.__class__ == B
    False
    >>> 
    >>> b = B()
    >>> b.__class__ == A
    False
    >>> b.__class__ == B
    True
    >>> 
    >>> c = C()
    >>> c.__class__ == C
    True
    >>> c.__class__ == D
    False
    >>> 
    >>> d = D()
    >>> d.__class__ == C
    False
    >>> d.__class__ == D
    True
    @+

  20. #20
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    salut,

    proposer isinstance ou type dans un langage à typage dynamique pour résoudre ce genre de problème me semble ne pas être une bonne habitude de programmation

    ce qui est important en Python, ce n'est pas ce que les choses sont, mais ce que les choses font (le fameux duck typing de Python).

    quelles sont les méthodes de ElementaryCell et de ComplexCell que tu veux utiliser dans ton traitement ? ou question posé différemment , comment peux tu distinguer une ElementaryCell d'une ComplexCell en fonction de leurs méthodes ?

Discussions similaires

  1. [Toutes versions] manipuler les doublons avec un dictionnaire et/ou variables tableaux
    Par patricktoulon dans le forum Contribuez
    Réponses: 0
    Dernier message: 31/05/2013, 15h06
  2. Manipulation des handle contexte
    Par rockbiker dans le forum DirectX
    Réponses: 1
    Dernier message: 09/05/2003, 18h51
  3. [VB6]manipuler les semaines en VB ?
    Par kamadji dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 02/05/2003, 12h33
  4. Réponses: 2
    Dernier message: 18/01/2003, 17h06
  5. Fonctions de manipulation des chaines et des dates
    Par Fares BELHAOUAS dans le forum Débuter
    Réponses: 3
    Dernier message: 09/11/2002, 22h43

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