J'ai construit une boucle for qui parcourt les valeurs d'une liste, les saisit comme clés pour deux dictionnaires et multiplie les 2 valeurs clés ensemble.
Lorsque vous imprimez, chaque valeur multipliée sur une nouvelle ligne .
J'aimerais additionner les valeurs pour obtenir un total combiné, mais je n'ai pas encore été en mesure de le faire.
#The list and two dictionaries List1 = ['coffee', 'tea' , 'cake' , 'scones' ] Dictionary1 ={'coffee' :'4', 'tea' :'2' , 'cake' :'6' , 'scones' :'8' } Dictionary2 = { 'coffee':'25' , 'tea':'18' , 'cake':'45' , 'scones':'30' } #the for function which runs through the list for i in range(len(List1)): t = ((int(Dictionary1[List1[i]])*int(Dictionary2[List1[i]]))) #now if you print t the following is printed: 100 36 270 240
J'aimerais pour obtenir la somme de ces valeurs, mais jusqu'à présent je n'ai pas pu.
Pour ce faire, j'ai essayé sum (t) qui produit l'erreur:
"> TypeError: l'objet 'int' n'est pas itérable"
J'ai pensé que c'était peut-être une erreur de concaténation alors j'ai essayé sum (int (t)) mais cela ne fonctionne pas.
J'ai aussi essayé de le transformer en list () " x = list (t) ainsi que le remplacement des lignes par des virgules par .replace("\n",",")
.
Tous les commentaires sont les bienvenus, je pense que c'est probablement facilement résolu mais je n'ai tout simplement pas pu y arriver - merci.
3 Réponses :
Si je vous comprends bien et que vous réfléchissez de la manière la plus simple, vous pouvez attribuer une variable et l'ajouter à chaque itération comme:
res = 0 for i in range(len(List1)): t = ((int(Dictionary1[List1[i]])*int(Dictionary2[List1[i]]))) res += t print(res)
Modifier: Et comme @patrick le suggère et discuté dans ce post , le nom de la variable modifié ne doit pas être sum
Pour clarifier si nécessaire, res + = t
signifie res = res + t
. Puisqu'il s'agit d'une question fondamentale, le lecteur pourrait ne pas être familier avec la notation + =.
L'erreur est explicite: TypeError: l'objet 'int' n'est pas itérable
lors de l'exécution de t
. Cela signifie que t
est juste une valeur int sigulaire. Le intégré à sum ()
a besoin un itérable sur lequel opérer.
Vous devez ajouter votre int à quelque chose pour chaque itération:
print (sum ( int(Dictionary1[a])*int(Dictionary2[a]) for a in List1))
Sorties:
646
Vous pouvez cependant créer une compréhension du générateur et utiliser le intégré fonction sum ()
également:
List1 = ['coffee', 'tea' , 'cake' , 'scones' ] Dictionary1 ={'coffee' :'4', 'tea' :'2' , 'cake' :'6' , 'scones' :'8' } Dictionary2 = { 'coffee':'25' , 'tea':'18' , 'cake':'45' , 'scones':'30' } # accumulate your values into s s = 0 for i in range(len(List1)): t = ((int(Dictionary1[List1[i]])*int(Dictionary2[List1[i]]))) s += t print(s) # print sum
Voici une liste de compréhension qui fait le travail
646
Sortie:
total = sum(int(Dictionary1[x]) * int(Dictionary2[x]) for x in List1)