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 :

Comparaison de liste


Sujet :

Python

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 19
    Par défaut Comparaison de liste
    Bonjour à tous,
    j'ai réussi à formater un fichier xlsx comme je le souhaitais sous forme de liste de tuples.

    Voici la structure de données que cela rend (cet un extrait en réalité il est beaucoup plus gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [('CRA', ['oxa-50 (oxa-50 like)', 'pdc-250', 'tem-2']), ('FLU', ['oxa-50 (oxa-50 like)', 'pdc-250', 'tem-14']) ('TOT', ['pdc-12', 'tem-1']), ('TIT', ['pdc-22']), ('VIE', ['tem-1']), ('GRE', ['oxa-50 (oxa-50 like)']), ('STL', ['tem-36']), ('BDH', ['tem-30']), ('FAW', ['tem-1']), ('CAT', ['tem-2'])]
    Voici ce que je souhaite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {'CRA' : ['oxa-50 (oxa-50 like)', 'pdc-250', 'tem-2']), 'FLU':['oxa-50 (oxa-50 like)', 'pdc-250', 'tem-14'], 'TOT' : ['pdc-12', 'tem-1'] , 'TIT': ['pdc-22'], 'STL': ['tem-36'], 'BDH': ['tem-30']}
    Je voudrais à partir de ce tuple créer par exemple un dictionnaire en gardant en clé le premier élément du tuple (qui est toujours différent) et par contre pour valeurs le second élément du tuple qui est une liste variant de 5 à 1 éléments et dont certains peuvent être commun avec d'autres tuples.
    Dans mon idée, j'ai déjà au préalable fait un tri pour avoir en début de liste les tuples donc les listes sont les plus longues.
    Je voudrais ensuite ajouter la première liste du premier tuple, créer en parallèle une liste stockant les éléments correspondant à cette liste afin que dans les itérations suivantes si un élément d'une liste est déjà présent alors on ne l'ajoute pas au dictionnaire et sinon on ajoute la liste correspondante.

    J'ai commencé à écrire le code suivant mais sans succès
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    dico_new = {}
    gene_unique = []
    for i,j in mon_tuple : 
        for gene in gene_unique : 
            if j not in gene :
                dico_new[i] = j
                gene_unique.append(j)
    print(dico_new)
    Merci d'avance pour votre aide

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par m01x75 Voir le message
    Je voudrais à partir de ce tuple créer par exemple un dictionnaire en gardant en clé le premier élément du tuple (qui est toujours différent) et par contre pour valeurs le second élément du tuple qui est une liste variant de 5 à 1 éléments
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    lll=[
    	("CRA", ["oxa-50 (oxa-50 like)", "pdc-250", "tem-2"]),
    	("FLU", ["oxa-50 (oxa-50 like)", "pdc-250", "tem-14"]),
    	("TOT", ["pdc-12", "tem-1"]),
    	("TIT", ["pdc-22",]),
    	("VIE", ["tem-1",]),
    	("GRE", ["oxa-50 (oxa-50 like)",]),
    	("STL", ["tem-36",]),
    	("BDH", ["tem-30",]),
    	("FAW", ["tem-1",]),
    	("CAT", ["tem-2",]),
    ]
     
    ddd=dict((x[0], x[1]) for x in lll)
    Et tu devrais prendre l'habitude de toujours mettre au-moins une virgule après une liste n'ayant qu'un seul élément. Pour les listes c'est pas grave mais pour les tuples ça l'est car c'est la virgule qui fait le tuple, pas les parenthèses.
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    lll=[1]		# C'est une liste
    lll=[1,]	# C'est aussi une liste
    lll=(1,)	# C'est un tuple
    lll=(1)		# C'est un int
    Donc pour pas risquer l'erreur...

    Citation Envoyé par m01x75 Voir le message
    et dont certains peuvent être commun avec d'autres tuples.
    Ce détail n'entre pas en ligne de compte.

    Citation Envoyé par m01x75 Voir le message
    Dans mon idée, j'ai déjà au préalable fait un tri pour avoir en début de liste les tuples donc les listes sont les plus longues.
    Pourquoi faire ??? Un dictionnaire n'a à priori pas besoin d'être trié puisqu'on est présumés y accéder par ses clefs..

    Citation Envoyé par m01x75 Voir le message
    Je voudrais ensuite ajouter la première liste du premier tuple, créer en parallèle une liste stockant les éléments correspondant à cette liste afin que dans les itérations suivantes si un élément d'une liste est déjà présent alors on ne l'ajoute pas au dictionnaire et sinon on ajoute la liste correspondante.
    Là j'ai rien compris. Mais il existe l'ensemble (set()) qui permet d'avoir des listes sans doublon.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 19
    Par défaut
    Merci pour ton retour.
    Le soucis c'est que je ne souhaite pas intégrer au dictionnaire l'ensemble clé : valeur si la valeur existe déjà dans la liste composant le tuple.
    C'est pourquoi j'avais eu l'idée de stocker les éléments déjà trouvé dans une liste.
    Je vais regarder avec les set() pour les doublons.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par m01x75 Voir le message
    Le soucis c'est que je ne souhaite pas intégrer au dictionnaire l'ensemble clé : valeur si la valeur existe déjà dans la liste composant le tuple.
    Je pense que cette remarque s'adresse par exemple à ("CRA", ["oxa-50 (oxa-50 like)", "pdc-250", "tem-2"]), ("FLU", ["oxa-50 (oxa-50 like)", "pdc-250", "tem-14"]) qui contient deux fois "oxa-50 (oxa-50 like)". Mais bon, il y est deux fois, tu ne le veux qu'une fois, il faut bien alors choisir dans laquelle des deux clefs tu le veux...

    Si on dit "c'est le premier qui trouve qui gagne", alors ceci fait le job
    Code python : 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
    lll=[
    	("CRA", ["oxa-50 (oxa-50 like)", "pdc-250", "tem-2"]),
    	("FLU", ["oxa-50 (oxa-50 like)", "pdc-250", "tem-14"]),
    	("TOT", ["pdc-12", "tem-1"]),
    	("TIT", ["pdc-22",]),
    	("VIE", ["tem-1",]),
    	("GRE", ["oxa-50 (oxa-50 like)",]),
    	("STL", ["tem-36",]),
    	("BDH", ["tem-30",]),
    	("FAW", ["tem-1",]),
    	("CAT", ["tem-2",]),
    ]
     
    ddd=dict()
    verif=set()
    for item in lll:		# for item in sorted(lll, key=lambda x:len(x[1]), reverse=True) permet de trier la liste "lll" selon le nombre d'élements en 1
    	ddd[item[0]]=list(set(item[1]) - verif)
    	verif.update(ddd[item[0]])
    # for
    print(ddd)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    Perso, je comprends de ton exemple et de ce que tu dis que tu ne crées pas le dico {'cat' : ['tem-2']} car la string 'tem-2' est présente dans une autre liste plus grande que ['tem-2'] ...
    Tu confirmes?
    Par contre si je t'ai bien compris, je n'en comprends pas le sens. Pourrais-tu l'expliquer?
    Quelles sont les motivations sous-jacentes à ce type de traitement?

Discussions similaires

  1. comparaison 2 listes
    Par moi5252 dans le forum Access
    Réponses: 2
    Dernier message: 27/05/2008, 17h47
  2. Comparaison sur liste chainée
    Par calagan dans le forum C
    Réponses: 9
    Dernier message: 24/07/2007, 21h58
  3. Comparaison de liste
    Par Bourdet dans le forum Langage
    Réponses: 2
    Dernier message: 13/10/2006, 09h50
  4. comparaison de listes chainee
    Par smalto dans le forum C
    Réponses: 5
    Dernier message: 22/09/2006, 18h10
  5. [List][Map?] Comparaison de Lists
    Par yolepro dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 25/08/2006, 17h39

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