2
votes

Tentative de somme des paires de valeurs clés dans un dictionnaire

J'ai eu du mal à comprendre comment additionner les valeurs des paires clé / valeur dans un dictionnaire.

L'impression du dictionnaire donne quelque chose de similaire à ce qui suit:

def add_p(self):
     return sum(self.p[self.p.values()]

I j'essaie d'ajouter les valeurs après les deux points en essayant de passer chaque clé à la fois en utilisant self.cust.p.keys ().

print(cust.p)
{datetime.datetime(2018, 2, 8, 0, 0): '18.70', datetime.datetime(2018, 2, 12, 0, 0): '8.63', datetime.datetime(2018, 2, 6, 0, 0): '37.61'}

Je recherche un résultat cela ajoute les 18.70, 8.63 et 37.61 de sorte que lorsque j'appelle la fonction, elle renvoie 64.94. J'ai également essayé d'utiliser des boucles for et des valeurs () en vain.

Merci pour votre temps.


2 commentaires

Je crois que vous n'avez besoin que de sum (self.p.values ​​()) , mais nous aurions besoin de vous pour nous montrer toute la classe pour être sûr.


les valeurs .... sont des str ings.


3 Réponses :


3
votes

Vous pouvez convertir les valeurs dict en nombres entiers avant de les transmettre à la fonction sum :

def add_p(self):
    return sum(map(int, self.p.values()))


0 commentaires

1
votes

Juste self.p.values ​​() devrait suffire. Étant donné que les valeurs sont actuellement des chaînes, vous devez les convertir en type numérique. Dans ce cas, float est le plus approprié.

def add_p(self):
    return sum(float(x) for x in self.p.values())


0 commentaires

1
votes

Vous stockez des valeurs sous forme de chaînes, ce qui provoque une erreur de la fonction sum .

Au lieu de cela, si les valeurs du dictionnaire sont converties de chaîne en flottant avant d'être stockées (en raison des décimales) , le code fonctionnerait.

Pour convertir des chaînes en flottant, utilisez la fonction map et transmettez le résultat à la fonction sum .

import datetime
keyval = {datetime.datetime(2018, 2, 8, 0, 0): '18.70', 
          datetime.datetime(2018, 2, 12, 0, 0): '8.63', 
          datetime.datetime(2018, 2, 6, 0, 0): '37.61'}

# map(float, keyval.values()) will convert all values to float
# sum will yield the total having sum all float values
sum(map(float, keyval.values())) 


0 commentaires