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 :

groupby fonction sum [Python 2.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de le_dilem
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Avril 2005
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Avril 2005
    Messages : 313
    Par défaut groupby fonction sum
    Bonsoir à tous,

    Voila j'ai mon dictionnaire comme suis:

    dict = [{partner:7, ht: 30.0, tax 10},{partner:7, ht: 40.0, tax 15},{partner:6, ht: 20.0, tax 5}]

    Je veux grouper la somme des ht, tax par partner:
    Donc avoir ce résultat : [{partner:7, ht: 70.0, tax 25},{partner:6, ht: 20.0, tax 5}]
    Je sais faire cela pour la somme d'une seul valeur HT, mais si je veux avoir les deux HT et TAX je fais comment ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     import itertools as it
     keyfunc = lambda x: x['partner']
     
     groups = it.groupby(sorted(datas, key=keyfunc), keyfunc)
     data = [{'partner':k, 'ht':sum(x['ht'] for x in g) } for k, g in groups]
    Merci de votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    La difficulté c'est que tu ne peux parcourir qu'une seule fois chaque groupe...
    Deux solutions, mais c'est pas très joli:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    data = [{'partner':k, 'ht':sum(x['ht'] for x in g), 'tax':sum(x['tax'] for x in g)}
            for k,g in [(k,list(g)) for k,g in groups]]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    data = [{'partner':k, 'ht':sum(x['ht'] for x in lg), 'tax':sum(x['tax'] for x in lg)}
            for k,g in groups for lg in (list(g),)]
    Une petite troisième:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    data = [reduce(lambda x, y: {'partner':k, 'ht': x['ht']+y['ht'], 'tax': x['tax']+y['tax']}, g)
            for k,g in groups]

  3. #3
    Membre éclairé Avatar de le_dilem
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Avril 2005
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Avril 2005
    Messages : 313
    Par défaut
    Pas très joli mais efficace Merci Beaucoup dividee

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

Discussions similaires

  1. [MySQL] Afficher le résultat de la fonction SUM()
    Par Flushovsky dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/12/2005, 01h15
  2. Fonction SUM de QReport
    Par sondo dans le forum Composants VCL
    Réponses: 6
    Dernier message: 14/12/2004, 12h31
  3. pb avec la fonction sum!
    Par ber_jp dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 28/08/2004, 22h22
  4. Fonction 'SUM'
    Par X-Deus dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/06/2003, 08h22
  5. [VBA-E] Fonction sum() dans une cellule
    Par Gonzo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/12/2002, 10h18

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