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 :

Garder en mémoire un dictionnaire


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 40
    Points
    40
    Par défaut Garder en mémoire un dictionnaire
    Bonjour à tous,

    Je dispose d'un fichier excel avec deux colonnes, je le lis, puis je crée un dictionnaire qui contient en clé les valeurs de la première colonne, et en valeurs les "valeurs" de la seconde colonne.

    Mon but est d'assimiler les clés de ce dictionnaire à une colonne de données présente dans un autre fichier (ces données correspondent aux valeurs de mon dictionnaire).
    Seulement lorsque je lis mon autre fichier et que je fais ma boucle, je perds les données de mon dictionnaire et la comparaison n'a pas lieu, je ne sais pas si je suis très clair le code sera peu être plus parlant :



    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
     
     
     
     
     
    File = open("mart_export-1.txt","r")    # r indique lecture
     
    File2 = open("BIOGRID-ORGANISM-Homo_sapiens-3.1.81.tab2.txt","r")    # r indique lecture
     
     
     
    dico={}
     
     
     
    for ligne in File.readlines():
     
    	ligne = ligne.rstrip('\n') # on retire le dernier caractere (retour chariot)
    	cols = ligne.split(',')    # Decoupage de la ligne pour recuperer les differents elements
     
     
    	if dico.has_key(cols[0])==False: #si la valeur lue n'est pas une cle du dico, alors on l'ajoute
    		dico[cols[0]]= cols[3]   # on attribut a cette cle la valeur situee dans la colonne 3 (IDENTREZ)
    	else:
    		pass
     
     
     
     
    	for ligne2 in File2.readlines():
    		ligne2 = ligne2.rstrip('\n') # on retire le dernier caractere (retour chariot)
    		cols2 = ligne2.split('	')    # Decoupage de la ligne pour recuperer les differents elements
    		if dico.values() == cols2[1]:   # si la valeur de la colonne correspond a la valeur de mon dico : ok
    			print "ok"
    Je n'ai pas de soucis de compilation, mais le dico que j'utilise dans ma seconde boucle est "vidé" de ses valeurs, ma comparaison ne me renvoie donc aucun "ok". Je voudrais donc savoir comment réutiliser mon dico dans le nouveau fichier de lecture.

    J'espère avoir été clair je m'y perds moi même parfois

    Merci à vous

  2. #2
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Vous rendez vous compte que votre première boucle n'est pas finie ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for ...
        premier traitement
        for ....
            on ne travaille que sur le premier résultat.
    Ce n'est pas plutot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for ...
        traitement
    for ....
        traitement.
    @+
    Merci d'utiliser le forum pour les questions techniques.

  3. #3
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Je pense que tout à été dit. +2**0 PauseKawa
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    En effet vous avez raison mon indentation était incorecte, seulement je n'ai toujours pas de retour sur la comparaison (alors que je suis sur que des valeurs sont bien équivalentes), cette ligne là est'elle corecte ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if dico.values() == cols2[1]:
    Je compare bien la valeur de mon dico aux valeurs de la colonne de mon fichier de lecture ?

  5. #5
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Citation Envoyé par tom77380 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if dico.values() == cols2[1]:
    Je compare bien la valeur de mon dico aux valeurs de la colonne de mon fichier de lecture ?
    Euh, je me questionne à ce niveau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dico[cols[0]]= cols[3]   # on attribut a cette cle la valeur situee dans la colonne 3 (IDENTREZ)
    Pourriez vous nous présenter une sortie à coup de "print" de cols?
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    Pourriez vous nous présenter une sortie à coup de "print" de cols?
    désolé je ne suis pas sur d'avoir compris, voici ce que me renvoie les différents print de cols lorsque je suis dans ma première boucle
    cols[0]
    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
     
    ENSG00000090975                       
    ENSG00000090975
    ENSG00000090989
    ENSG00000090989
    ENSG00000090989
    ENSG00000090989
    ENSG00000090989
    ENSG00000090989
    ENSG00000090989
    ENSG00000090989
    ENSG00000090989
    ENSG00000090989
    ENSG00000090989
    ENSG00000091009
    ENSG00000091009
    ENSG00000091009
    ENSG00000091010
    ENSG00000091010
    ENSG00000091010
    ENSG00000091010
    ENSG00000091010
    ENSG00000091039
    ENSG00000091039

    cols[3]
    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
     
    79173
    79173
    90379
    90379
    90379
    90379
    90379
    54862
    54862
    54862
    54862
    54862
    54862
    54862
    54862
    54862
    83546
    83546
    83546
    83546
    83546
    83546
    83546
    4148
    4148
    4148
    4148

    j'ai également affiché mon dico pour voir qu'il avait été rempli correctement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ENSG00000165502': '6166', 'ENSG00000188779': '390598', 'ENSG00000160345': '138162', 'ENSG00000072832': '1400', 'ENSG00000128594': '64101', 'ENSG00000026751': '57823', 'ENSG00000128591': '2318', 'ENSG00000128590': '4189', 'ENSG00000184887': '90135', 'ENSG00000100744': '51527', 'ENSG00000129353': '57153', 'ENSG00000100211': '25776', 'ENSG00000033327': '9846', 'ENSG00000142173': '1292', 'ENSG00000100968': '4776', 'ENSG00000206395': '23564', 'ENSG00000100218': '27156', 'ENSG00000120235': '3443', 'ENSG00000100749': '7443', 'ENSG00000151623': '4306', 'ENSG00000196378': '80778', 'ENSG00000121579': '80218', 'ENSG00000181927': '81300', 'ENSG00000130830': '4354', 'ENSG00000107779': '657', 'ENSG00000125551': '5342', 'ENSG00000204983': '5644', 'ENSG00000143457': '55204', 'ENSG00000134256': '9398', 'ENSG00000134255': '10390', 'ENSG00000166348': '159195', 'ENSG00000134253': '80263', 'ENSG00000143452': '84072', 'ENSG00000134250': '4853', 'ENSG00000097033': '51100', 'ENSG00000134259': '4803', 'ENSG00000134258': '79679', 'ENSG00000185432': '25840', 'ENSG00000197153': '8350', 'ENSG00000124935': '10647', 'ENSG00000186187': '84937', 'ENSG00000124939': '4246'}

    Biensûr il a des dizaines de millier de lignes en tout.


    EDIT: et un extrait de cols2[1]

    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
     
    1399
    367
    2175
    2176
    1647
    4085
    3265
    10297
    999
    991
    10297
    996
    999
    1001
    1001
    1026
    56647
    10912
    10912
    10912
    16

  7. #7
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    Citation Envoyé par afranck64 Voir le message
    Pourriez vous nous présenter une sortie à coup de "print" de cols?
    Et là tout est dit: pensez à faire un print de vos valeurs, vous trouverez l'erreur.

    @+ et bon code.

    Note: if cols[0] not in dico

    Edit: grilled
    Merci d'utiliser le forum pour les questions techniques.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    D'accord merci pour vos conseils je vais regarder tout ça

  9. #9
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    Ce n'est pas if cols2[1] in dico.values() ?
    Merci d'utiliser le forum pour les questions techniques.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    Ce n'est pas if cols2[1] in dico.values() ?
    Merci à vous , ma synthaxe était mauvaise. (je ne comprends pas comment était interprétée ma ligne puisque je n'avais pas de message d'erreurs).

  11. #11
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    J'adore l''aircoding'
    Pensez à utiliser in lorsque c'est possible, c'est puissant
    Merci d'utiliser le forum pour les questions techniques.

  12. #12
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Au vu du "log" je pense avoir trouvé le soucis. Il me semble que les "clés" apparaissent plusieurs fois dans votre premier fichier.
    a,bla,toto
    b,bla,rah
    a,bla,tata
    Vous donne le dico: En supposant votre second fichier soit "identique" au précédent, votre liste cols2 sera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cols2 = ['toto','rah','tata']
    et puis la comparaison sera toujours fausse.
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  13. #13
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    Citation Envoyé par tom77380 Voir le message
    je ne comprends pas comment était interprétée ma ligne puisque je n'avais pas de message d'erreurs
    Et bien dico.values() vous retourne la liste (un objet dict_values en Python 3, ce n'est pas le cas ici) des valeurs de dico et vous le comparez à une valeur: donc ce n'est pas une erreur mais c'est False.
    Merci d'utiliser le forum pour les questions techniques.

  14. #14
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    La solution y était déjà:
    Citation Envoyé par PauseKawa Voir le message
    Ce n'est pas if cols2[1] in dico.values() ?
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    Je comprends mieux, merci de m'avoir accordé de votre temps

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 21/10/2006, 19h10
  2. Garder en mémoire les valeurs entrées par l'utilisateur
    Par dessinateurttuyen dans le forum Langage
    Réponses: 11
    Dernier message: 17/08/2006, 09h15
  3. Garder en mémoire les identifiants FTP
    Par .:dev:. dans le forum Langage
    Réponses: 6
    Dernier message: 12/08/2006, 14h41
  4. garder en mémoire une dll
    Par mnaulet dans le forum C++
    Réponses: 2
    Dernier message: 09/08/2006, 12h36
  5. Réponses: 7
    Dernier message: 07/07/2006, 12h23

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