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 :

Soustraire des valeurs entre deux dictonnaires


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Par défaut Soustraire des valeurs entre deux dictonnaires
    Bonsoir,

    je dispose de deux dictionnaires avec des clés communes, je compare mes dicos et lorsque je trouve une clé commune à mes deux dictionnaires je voudrai soustraire la valeur associée à la clé du 1er dico à celle du second.

    Voici le début de mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    dico1 = {}
    dico2 = {}
     
     
    compteur = 0
    for key in dico1:
    	if key in dico2:
    		compteur += 1
            else:
                    print key
     
    print compteur
    J'arrive à compter combien de fois mes clés se retrouvent dans mes 2 dicos, mais je n'arrive pas à soustraire entre elles les valeurs correspondantes aux 2 clés (ce sont des entiers).
    Je voudrai donc obtenir la différence et sa clé associée.

    Merci à vous

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 576
    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 576
    Par défaut
    On peut utiliser set pour vérifier les analogies entre keys de chaque dico

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> dico = {12:1325, 6:254, 8:125}
    >>> dico_1 = {12:255, 8:142}
    >>> set(dico) & set(dico_1)
    {8, 12}
    du coup

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> for i in set(dico) & set(dico_1):
    ...     print(dico[i] - dico_1[i])
    ... 
    -17
    1070

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Par défaut
    On peut récupérer les clés analogues mais peut on récupérer les valeurs correspondantes ?

    Dans l'idéal je voudrai obtenir cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dico = {12:15, 87:7, 11: 45}
     
    dico1 = {5:7, 12: 13}
     
    ...
     
    12    2
    A partir des 2 premiers dicos on ressort la clé commune ainsi que la différence des valeurs


    EDIT : désolé je n'avais pas vu l'edit, je regarde ça de ce pas, merci à vous

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 576
    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 576
    Par défaut
    Voir mon edit plus haut, et donc par rapport à ton edit je réedite



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> dico = {12:15, 87:7, 11: 45}
    >>> dico1 = {5:7, 12: 13}
    >>> for i in set(dico) & set(dico1):
    ...     print({i:dico[i] - dico1[i]})
    ... 
    {12: 2}

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Par défaut
    Merci encore pour votre proposition, le code me convient seulement je n'arrive plus à le faire tourner, j'ai un problème de type, avec la solution précédente (qui ne faisait pas intervenir la clé du 1 dico) je pouvais caster les deux éléments de ma soustraction, mais là impossible. Lorsque j’exécute le code "à la lettre" j'obtiens

    unsupported operand type(s) for -: 'str' and 'str'
    EDIT : C'est de ma faute, j'ai précisé que je travaillais avec des entiers mais mes clés sont elles des char

    EDIT 2 : je suis juste fatigué ça tourne à merveille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print ({i:int(dico1[i]) - int(dicoc[i])})
    Un grand merci pour votre aide tout au long de cette soirée

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

Discussions similaires

  1. [XL-2000] VBA pour sommer des valeures entre deux dates (nombreuses données)
    Par maxhor dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/04/2014, 18h30
  2. Affichers des valeurs entre deux nombres.
    Par anirolf dans le forum Débuter
    Réponses: 10
    Dernier message: 13/11/2011, 01h35
  3. Permuter des valeurs entre deux listes
    Par doogybreton dans le forum IHM
    Réponses: 2
    Dernier message: 14/12/2007, 22h42
  4. [TP] Echanger des données entre deux programmes
    Par ILIAS Raphaël dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 22/03/2005, 10h31
  5. Réponses: 7
    Dernier message: 30/12/2004, 13h01

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