He creado un bucle for que pasa por los valores de una lista, los ingresa como claves para dos diccionarios y multiplica los 2 valores clave juntos.

Cuando imprime, le da a cada valor multiplicado en una nueva línea.

Me gustaría agregar los valores juntos para obtener un total combinado, pero hasta ahora no he podido.

#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

Me gustaría obtener la suma de estos valores, pero hasta ahora no he podido.

Para hacerlo, probé sum (t) que produce el error:

"> TypeError: el objeto 'int' no es iterable"

Pensé que podría ser un error de concatenación, así que intenté sum (int (t)) pero esto no funciona.

También he intentado convertirlo en list () "x = list (t), así como reemplazar las líneas con comas con .replace("\n",",").

Todos los comentarios son bienvenidos, creo que esto probablemente se resuelva fácilmente, pero no he podido llegar allí, gracias.

2
X-cessive Pupil 9 may. 2019 a las 23:31

3 respuestas

La mejor respuesta

El error se explica por sí mismo: TypeError: 'int' object is not iterable al ejecutar t. Eso significa que t es solo un valor int sigular. El integrado en sum() necesita un iterable para funcionar .

Debe agregar su int a algo para cada iteración:

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

Salidas:

646

Sin embargo, puede crear una comprensión del generador y utilizar el integrado en sum() también funciona:

print (sum ( int(Dictionary1[a])*int(Dictionary2[a]) for a in List1))
1
Patrick Artner 9 may. 2019 a las 20:43

Aquí hay una lista de comprensión que hace el trabajo

total = sum(int(Dictionary1[x]) * int(Dictionary2[x]) for x in List1)

Salida:

646
1
rdas 9 may. 2019 a las 20:40

Si lo entiendo bien y pienso de la manera más simple, puede asignar una variable y sumarla en cada iteración como:

res = 0
for i in range(len(List1)): 
  t = ((int(Dictionary1[List1[i]])*int(Dictionary2[List1[i]])))
  res += t

print(res)

Editar: Y como @patrick sugiere y analiza en esta publicación, el nombre de la variable no se editó ser sum

1
vahdet 9 may. 2019 a las 20:43