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.
3 respuestas
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))
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
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
Preguntas relacionadas
Preguntas vinculadas
Nuevas preguntas
python-3.x
Para preguntas sobre la programación de Python que son específicas de la versión 3+ del lenguaje. Use la etiqueta [python] más genérica en todas las preguntas de Python, y solo agregue esta si su pregunta es específica de la versión. Utilice las etiquetas [python-2.x] para las preguntas de Python 2.