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 :

Supprimer la clé de croisement dans une liste de dictionnaires


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 6
    Par défaut Supprimer la clé de croisement dans une liste de dictionnaires
    Bonjour ,
    J'ai une question technique :
    je cherche a supprimer la clé de croisement c,qui est dans une liste de dictionnaires , mais je n'arrive pas a entrer dans la liste ; sachant qu'il faut faire cela plusieurs fois je serais parti sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in d1:
        i[:][:]["c"]
    toujours le problème d'entrer dans le dict
    voila le code pour cette partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def augmenteDict(d1, c, d2) :
        d = {} 
        for data in d1 :
            d = data.values() 
        del ["c"] #Effacer la valeur correspondant à la clé de croisement, c
        for data in d2 :
            d = data.values() 
       # pour la clé c
    je cherche aussi a comparer valeur associée à la clé c du dictionnaire de t1 est la même que celle du dictionnaire t2 , mais c'est la même solution (je crois )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def croiseTables(t1, t2, c) :
        base = [] #Créer une liste vide : base
        for dict in t1 :#Pour tous les dictionnaires de la liste t1 :
            for dict in t2 : #Pour tous les dictionnaires de la liste t2 :
                if d1[C] ==d2[ C]:#Si la valeur associée à la clé c du dictionnaire de t1 est la même que celle du dictionnaire t2 :
                    t = augmenteDict(t1,c,t2)#augmenter le dictionnaire de t1 de celui de t2 par la clé c
                    base.append(t) #ajouter le dictionnaire obtenu à la fin de la liste base
        return base #retourner la liste base
    est ce que quelqu'un pourrait m'éclairer ?
    merci pour votre aide

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    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 : 4 064
    Par défaut
    Bonjour,

    Vous vous mélangez, dans le code que vous écrivez, et des incohérences en ressortent comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for dict in t1 :#Pour tous les dictionnaires de la liste t1 :
        for dict in t2 : #Pour tous les dictionnaires de la liste t2 :
            if d1[C] ==d2[ C]:
    Votre 1er travail est de rechercher votre clé dans un dictionnaire, ce qui permettra de le faire aussi dans le second... si on admet trouver cette clé dans l'un et l'autre des dictionnaires, on peut continuer !

    La difficulté est de créer une fonction suffisamment flexible pour admettre que des dictionnaires en paramètre ne seront pas de la même forme et que vérifier qu'une clé est dans un dictionnaire n'est pas aussi simple qu'un test if key in my_dict (fonction récursive ?)

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 754
    Par défaut
    Salut,

    Citation Envoyé par lIlIlIl Voir le message
    est ce que quelqu'un pourrait m'éclairer ?
    Il serait préférable d'essayer d'expliquer le pourquoi du pourquoi... i.e. pas ce que vous essayez de coder mais comment vous en êtes arrivé à devoir coder ce truc.

    Car, comme vous débutez en programmation, on peut douter que vous sachiez poser correctement le problème à résoudre et les solutions qui vont avec => faire fonctionner votre code ne vous avancera à rien (et ne sera que perte de temps...).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par lIlIlIl Voir le message
    sachant qu'il faut faire cela plusieurs fois je serais parti sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in d1:
        i[:][:]["c"]
    L'idée est intéressante. Sauf que je ne sais pas si Python est capable de comprendre cette sytaxe.
    Mais au fait, pourquoi n'as-tu pas essayé ???
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> d={"x" : "toto", "c" : "titi"}
    >>> a=[[dict(d), dict(d)], [dict(d), dict(d)]]
    >>> a
    [[{'x': 'toto', 'c': 'titi'}, {'x': 'toto', 'c': 'titi'}], [{'x': 'toto', 'c': 'titi'}, {'x': 'toto', 'c': 'titi'}]]
    >>> a[0][0]
    {'x': 'toto', 'c': 'titi'}
    >>> a[0][0]["c"]
    'titi'
    >>> a[:][:]["c"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: list indices must be integers or slices, not str
    Donc voilà, c'était assez facile à trouver tout seul.

    Citation Envoyé par lIlIlIl Voir le message
    voila le code pour cette partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def augmenteDict(d1, c, d2) :
        d = {} 
        for data in d1 :
            d = data.values() 
        del ["c"] #Effacer la valeur correspondant à la clé de croisement, c
        for data in d2 :
            d = data.values() 
       # pour la clé c
    Moi j'aime bien les codes qui commencent par l'instruction d=truc puis juste en dessous d=autre_chose et en plus dans une boucle où "d" n'est ensuite pas utilisé. On sent que le codeur est un fin limier, qu'il en a dans la tête, qu'il sait en stratège accompli ce qu'il fait avec précision. Surtout quand ça continue ensuite avec un del ["c"] avec ces crochets qui sont reliés à rien (au fait, "c" c'est une chaine ou une variable???). Et puis pourquoi écrire une fonction qui fait une action identique sur deux choses alors que tu pourrais lui faire faire cette action sur "une" chose et l'appeler deux fois??? Et puis bon ce nom "augmente" destiné à une fonction qui enlève des trucs...

    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
    def fonctionCon(d, key):
    	for l in d: del l[key]
     
    d={"x" : "toto", "c" : "titi"}
    tab=[[dict(d), dict(d)], [dict(d), dict(d)]]
    print(tab)
     
    fonctionCon(tab[0], "c")
    print(tab)
    fonctionCon(tab[1], "c")
    print(tab)
     
    tab=[[dict(d), dict(d)], [dict(d), dict(d)]]
    print(tab)
    for item in tab: fonctionCon(item, "c")
    print(tab)
    Voilà.

    Citation Envoyé par lIlIlIl Voir le message
    je cherche aussi a comparer valeur associée à la clé c du dictionnaire de t1 est la même que celle du dictionnaire t2 , mais c'est la même solution (je crois )
    Oui bien sûr, enlever ou comparer c'est la même solution...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def fonctionCon2(d1, d2, key): return all(x[key] == y[key] for (x, y) in zip(d1, d2))
     
    d={"x" : "toto", "c" : "titi"}
    tab=[[dict(d), dict(d)], [dict(d), dict(d)]]
    print(fonctionCon2(tab[0], tab[1], "c"))

    Citation Envoyé par lIlIlIl Voir le message
    PS : c'est urgent
    Au cas où en le voyant dans le titre on se soit dit "ouais, non c'est pas certain que ce soit vraiment urgent en fait"...
    Ici on n'aime pas ceux qui arrivent avec des adjectifs comme "urgent" ou toute autre forme d'impératif. Déjà d'une part parce que leur urgence n'a aucune raison d'être la nôtre ; ensuite d'autre part parce que leur problème n'a aucune raison de passer devant d'autres demandeurs probablement tout aussi en détresse dans leur point de vue. Mais surtout parce que quoi qu'il en soit, si c'est un devoir/tp/examen on te l'aura donné suffisamment tôt pour que tu aies le temps de le réaliser. Et si c'est personnel, alors l'urgence tombe d'elle-même (sauf égo surdimensionné).
    Mais tu as raison sur un point, il existe quand-même ici un certain degré d'urgence : urgence à te mettre sérieusement à Python en (par exemple) ouvrant un tutoriel.
    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]

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 21/01/2016, 08h36
  2. Question techniques sur les extents
    Par lecharcutierdelinux dans le forum Oracle
    Réponses: 16
    Dernier message: 24/08/2006, 09h01
  3. [debutant]Question technique
    Par toto4650 dans le forum Débuter
    Réponses: 23
    Dernier message: 13/07/2005, 02h06
  4. WSAD et serveur appli, question technique
    Par Canou dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 4
    Dernier message: 09/12/2004, 14h35
  5. [.NET] Une question technique a propos du mode asynchrone
    Par nicknolt dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 08/06/2004, 10h07

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