2 votes

Multiplication d'une liste d'éléments d'un dictionnaire

J'ai un dictionnaire et celui-ci contient une liste de deux nombres chacun. J'ai besoin de multiplier ces nombres ensemble et de garder un total courant pour toutes les clés du dictionnaire. Je continue à obtenir un TypeError :

sub = v1 * v2
TypeError: can't multiply sequence by non-int of type 'list'

J'ai essayé de le lancer pour qu'il flotte, mais ensuite je me retrouve.. :

v1= float(c.get(k,v[0]))
TypeError: float() argument must be a string or a number, not 'list'

Code ci-dessous :

change = {'penny': [.01,57], 'nickel':[.05,34],'dime':[.1,42], 'quarter':  [.25,19],'half dallar':[.5,3],'one dollar bill':[1,24],'five dollar bill':[5,7],'ten dollar bill':[10,5],'twenty dollar bill':[20,3]}

def totalAmount(c):
   total = 0
   for k, v in c.items():
       v1= c.get(k,v[0])
       v2= c.get(k,v[1])

       sub = v1 * v2
       total = total + sub

totalAmount(change)
print("Total in petty cash: $" + total)

3voto

Mark Tyler Points 383
v1= c.get(k,v[0])
v2= c.get(k,v[1])

Dans cette situation v1 y v2 sont toutes deux définies comme v . c.get(i) renvoie à c[i] donc c[k] retournera naturellement la valeur correspondante v . Au lieu de cela, divisez votre liste comme ceci :

v1, v2 = v

2voto

blhsing Points 57682

Le deuxième paramètre de la dict.get est destinée à la valeur par défaut, et non à la récupération d'autres valeurs.

Vous pouvez décompresser les valeurs des sous-listes comme ceci :

for k, (v1, v2) in c.items():
    sub = v1 * v2
    total = total + sub

2voto

mehrdad-pedramfar Points 4667

Essayez ça :

change = {'penny': [.01,57], 'nickel':[.05,34],'dime':[.1,42], 'quarter':  [.25,19],'half dallar':[.5,3],'one dollar bill':[1,24],'five dollar bill':[5,7],'ten dollar bill':[10,5],'twenty dollar bill':[20,3]}

def totalAmount(c):
   total = 0
   for k, v in c.items():
       sub = v[0] * v[1]
       total = total + sub
   return total

t = totalAmount(change)
print(t)

La sortie sera

181.72

et le problème avec votre code est v1= c.get(k,v[0]) . vous devez le changer en v1= c.get(k)[0] si vous voulez utiliser get mais lorsque vous utilisez .items() vous n'avez pas besoin d'utiliser get . v sera le tableau souhaité à chaque itération.

1voto

Vinoth96 Points 251
[change[key][0]*change[key][1] for key in change.keys()]

1voto

AGN Gazer Points 5831
total = sum(v1 * v2 for v1, v2 in change.values())

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X