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 :

Etude comparative de dictionnaires


Sujet :

Python

  1. #1
    Membre du Club
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Points : 52
    Points
    52
    Par défaut Etude comparative de dictionnaires
    Bonjour à tous,

    je dispose de deux dictionnaires que je veux comparer, voici un exemple des données qui me permettent de construire mes dicos :

    AAAAABBB _____1
    CCCCAAAA_____ 2
    BABABABAB _____4
    ABACBABCB_____ 3
    ABABCABCB _____6
    BBAACCCAA _____2

    En fait je dipose d'un 1er fichier contenant des motifs (chaînes de caractères) et l'occurence du motif. Le second fichier contient lui aussi des motifs et l'occurence mais en plus grand nombre (tous les motifs du 1er fichier ainsi que des motifs supplémentaires). Ce que je veux, c'est écrire dans un fichier le nom de mes motifs communs aux deux fichiers (c'est à dire tous les motifs du 1er fichier) ainsi que le nombre d'occurence dans le fichier 2, et le nombre d'occurence dans le fichier 1, quelque chose comme ça :


    TTTCGCGA_____ 1 _____ 2
    TTTCGCGC_____ 2 _____ 2
    AGAGGACC_____ 4 _____ 5
    TTTCGCGG_____ 3 _____ 4
    CGTCCTCT_____ 6 _____ 7
    ACCTACTG_____ 2 _____ 3


    Voici comment j'ai procédé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (i,j),(k,l) in zip(dico1.items(),dico2.items()):
    	if i in dico2:
    		output.write(i+'\t' + str(j) + '\t' + str(l) + '\n')
    Je test si le motif du dico1 est présent dans le dico2, si oui j'écris ce motif et son nombre d'occurences (du fichier 1 toujours) + le nombre d'occurences correspondant dans le fichier2.

    Mon problème est qu'en output l'occurence des motifs du second fichier (str(l) dans mon code) n'est pas du tout la bonne, elle ne correspond pas avec l'occurence du fichier de départ. Y a t'il un problème dans mon test ?

    Merci à vous

  2. #2
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Bonjour,
    il faudrait nous donner un exemple minimal en nous indiquant où tu bloques car pour le moment la question manque de clarté.

  3. #3
    Membre du Club
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Points : 52
    Points
    52
    Par défaut
    Bonjour,

    pour simplifier je cherche à faire correspondre 2 clés dans 2 dictionnaires, et à afficher la clé du premier dico avec les valeurs du 1er et du second.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dico = {clé:valeur,...}
    dico2 = {clé2:valeur2,...}
    Si clé == clé2:
    Alors j'affiche clé, valeur, valeur2

    C'est ce que j'ai voulu représenter dans mon code : (i,j) représentent respetivement la clé et la valeur de dico1, et (k,l) représentent la clé et la valeur du dico2.
    Si mon dico2 contient la clé de dico1 alors j'afficher clé1, la valeur1 et la valeur2.

    Et c'est là que je bloque, je n'arrive pas à récupérer la valeur2 correspondant à mon second dico, ce que j'obtiens en sortie ne correspond pas à la bonne valeur :

    ABCDABCD_____2,_____1

    La seconde valeur (1) est incorecte, en effet dans dico2 la valeur correspondant à la clé ABCDABCD n'est pas égale à 1.

  4. #4
    Membre du Club
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Points : 52
    Points
    52
    Par défaut
    Le problème était en fait que j'appelais mal la valeur correspondant à mon dico

    Voici mon code si jamais ça peut aider quelqu'un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for cle,valeur in dico1.items():
    	if cle in dico2:
    
    		print cle, valeur, dico2[cle]
    		output.write(cle +'\t'+valeur+'\t'+dico2[cle]+'\n')

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    On pourrait faire une fonction test permettant de savoir si la clé se trouve dans les deux dictionnaires.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def is_exist(cle, dico_1, dico_2):
        if cle in dico_1 and cle in dico_2:
            return True
        return False
     
     
    dico_1 = {'1': 'coucou', '2': 'hello', '3': 'bye'}
    dico_2 = {'1': 'tchao', '4': 'astalavista', '3': 'salut'}
     
    print [(cle, dico_1[cle], dico_2[cle]) for cle in dico_1 if is_exist(cle, dico_1, dico_2)]
    # [('1', 'coucou', 'tchao'), ('3', 'bye', 'salut')]
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  6. #6
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    @fred: J’voudrais pas dire, mais vu qu’on sait que cle est déjà dans dico_1, c’est p’tet’ pas la peine de refaire le test…

    Et autant éviter un appel de fonction pour un test aussi simple, amha*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dico_1 = {'1': 'coucou', '2': 'hello', '3': 'bye'}
    dico_2 = {'1': 'tchao', '4': 'astalavista', '3': 'salut'}
     
    print [(cle, val, dico_2[cle]) for cle, val in dico_1.iter_items() if cle in dico_2]
    # Or print([(cle, val, dico_2[cle]) for cle, val in dico_1.items() if cle in dico_2]) in py3
    # [('1', 'coucou', 'tchao'), ('3', 'bye', 'salut')]
    PS: et, si les dicos sont gros et relativement peu “intersectés”, cette version est peut-être plus performante (normalement, si python est bien codé, la conversion clés_de_dico => set devrait être extrêmement efficace)*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dico_1 = {'1': 'coucou', '2': 'hello', '3': 'bye'}
    dico_2 = {'1': 'tchao', '4': 'astalavista', '3': 'salut'}
     
    print [(cle, dico_1[cle], dico_2[cle]) for cle in set(dico_1) & set(dico_2)]
    # py3: print([(cle, dico_1[cle], dico_2[cle]) for cle in set(dico_1) & set(dico_2)])
    … Avec en prime l’avantage d’être facilement et efficacement extensible à plus de dicos.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Etude comparative Spring-WS VS AXIS
    Par lakerr dans le forum Services Web
    Réponses: 0
    Dernier message: 16/06/2009, 12h11
  2. Etude comparative JOnAS, JBoss, Geronimo, Glassfish
    Par Aldian dans le forum Glassfish et Payara
    Réponses: 4
    Dernier message: 09/03/2009, 16h52
  3. L'etude comparative entre linux et windows?
    Par karimala dans le forum Contribuez
    Réponses: 2
    Dernier message: 13/12/2008, 16h09
  4. Etude comparative entre RTP et TCP/UDP
    Par imadin dans le forum Développement
    Réponses: 6
    Dernier message: 25/05/2008, 15h13
  5. Etude comparatives linux
    Par youness_ka dans le forum Distributions
    Réponses: 2
    Dernier message: 22/05/2007, 21h17

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