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 :

dictionnaire dans une double boucle [Python 2.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Octobre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut dictionnaire dans une double boucle
    Bonjour,

    L’objectif de ma requête est de prendre les clefs d’un dico pour associé des valeurs d’un autre dico

    Le format du dico1 est sous la forme
    Dico1[seq] :{ Projet1 , Projet2 }
    Soit par exemple :’ATG’ :{ ”ID1”: [1], “ID2”: [A]}
    ’ATT’ :{ ”ID1”: [2], “ID2”: []}
    ’ACG’ :{ ”ID1”: [], “ID2”: [B]}
    ’CCG’ :{ ”ID1”: [3], “ID2”: [X]}

    J’ai un fichier issu d’un blast entre ses 2 projets et je souhaite obtenir un dictionnaire avec comme clef la séquence et comme valeur l’identifiant1, identifiant2 et le pourcentage d'homologie


    Mon code se déroule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    For seq in dico1.keys():
     
          For blast in Sortie_blast .readlines():
    		Liste1=[blast.strip().split(“\t”)
    		Projet2= Liste1[0]
    		Projet1= Liste1[1]
    		Pourcentage= Liste1[2]
     
    	        If  Pourcentage==”100” :
    		         Dicoblast[seq]={“ID1”: [Projet1], “ID2”: [Projet2],”Pourcentage” :[ Pourcentage]}
     
    Print Dicoblast
    Je n’obtiens que la dernière valeur
    Soit ’CCG’ :{ ”ID1”: [3], “ID2”: [X], ],”Pourcentage” :[ 100.00]}
    Alors que je devrais également avoir ’ATG’ :{ ”ID1”: [1], “ID2”: [A], ],”Pourcentage” :[ 100.00]}

    Je pense que le problème vient du placement de la boucle for seq mais ou que je la mette, je n’obtiens pas le bon résultat.
    Si quelqu’un à une piste
    D’avance merci

  2. #2
    Nouveau membre du Club Avatar de temabul
    Homme Profil pro
    Informatique de Loisir
    Inscrit en
    Février 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Informatique de Loisir

    Informations forums :
    Inscription : Février 2015
    Messages : 26
    Points : 31
    Points
    31
    Par défaut
    Bonjour,
    Il semble y avoir un problème d'indentation. Le deuxième for doit-être décalé.
    Mais il me semble que ce n'est pas le seul problème: lg_blast = "95" : ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Octobre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Exact, désolé, ça embrouille un peu plus
    Le code indiqué est un copier coller d'une partie d'un script, j'ai voulu l'épurer et du coup, j'ai oublié d'enlever des choses (le lg_blast) et j'ai également oublié une indentation (sinon ça m'aurait mis un code erreur) et je n'ai pas remis l'initialisation du dico.
    J'ai modifié le post.
    Une piste du coup ?

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    J'ai du mal à croire que tu obtiens malgré tout un résultat avec ce code.

    Il y a toujours des erreurs de syntaxe et de code.

    Et en plus Python ne te retournera jamais quelque chose comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ”Pourcentage” :[ 100.00]}
    Mais bon, si je pige quelque chose à ce que tu veux faire alors essaye comme ceci:
    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
     
    # for avec minuscule !
    for seq in dico1.keys():
        # for avec minuscule, pas d'espace entre blast et .readlines !
        for blast in Sortie_blast.readlines():
            # Un crochet inutile !
            items = blast.strip().split("\t")
            items[2] = float(items[2])
            # if avec minuscule !
            if items[2] == 100.0:
                Dicoblast[seq] = {"ID1": [items[0]], 
                                  "ID2": [items[1]],
                                  "Pourcentage": [items[2]]}
     
    # print avec minuscule !
    print Dicoblast

  5. #5
    Membre à l'essai
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Octobre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    J'ai fait un passage sous word entre mon script (qui est sous VM ) et le forum, d'où les transformations (majuscules à chaque début de ligne, guillemets...). A ça, on ajoute une mauvaise relecture de ma part pour un [.
    Mon vrai script me donne un résultat mais pas celui attendu...
    Après lecture et parsage du fichier blast, le 100.00 est considéré comme un str c'est pourquoi je l'ai laissé dans son format original avec les ""

    Après test, ton script ne fonctionne pas. Cela me donne le même résultat que le mien à savoir un dictionnaire avec un élément unique (le dernier) alors que je devrais en avoir plusieurs

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/06/2015, 19h13
  2. [XL-2010] Utilisation de la Fonction DIR dans une double boucle
    Par Bruno92320 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 16/12/2014, 19h31
  3. Sommer dans une double boucle for
    Par ju_cayenne dans le forum MATLAB
    Réponses: 1
    Dernier message: 09/09/2014, 15h23
  4. Réponses: 2
    Dernier message: 25/03/2014, 09h20
  5. Unset dans une double boucle
    Par topgun1223 dans le forum Langage
    Réponses: 8
    Dernier message: 08/07/2012, 18h55

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