Entonces, imagina que tengo un dict como este:

dict = {
    "100311929821626368" : {
        "battles" : 2,
        "loses" : 0,
        "maxstamina" : 50,
        "news" : True,
        "stamina" : 50,
        "weeb" : "Chuey",
        "wins" : 0
    },
    "100802430467325952" : {
        "battles" : 4,
        "loses" : 0,
        "maxstamina" : 50,
        "news" : True,
        "stamina" : 45,
        "weeb" : "Red Haired Bastard",
        "wins" : 0
    },
    "101970309296447488" : {
        "battles" : 1,
        "loses" : 0,
        "maxstamina" : 50,
        "news" : True,
        "stamina" : 45,
        "weeb" : "Niusky",
        "wins" : 1
    }
}

Y mi código es este código:

wow = 0
for id in dict:
   for i in dict[id]["battles"]:
      wow += i

El problema es que no estoy seguro de cómo agregar todas las batallas int a la vez. Porque me sale este error:

TypeError: 'int' object is not iterable

¿Cómo lo arreglaría para que todas las batallas en el dict!

0
NekoTony 16 feb. 2017 a las 04:31

3 respuestas

La mejor respuesta

¿Es esto lo que quieres?

wow = 0
for id in dict:
     wow += dict[id]["battles"]

Explicación si es necesario: dict[id]["battles"] ya devuelve el valor int. Intentaba iterar sobre ese int que no tiene sentido.

3
Julien 16 feb. 2017 a las 01:42

El problema es que dict[id]['battles'] es un objeto de tipo int, por lo que es la razón por la que obtiene el error TypeError: 'int' object is not iterable.

Puede resolverlo:

wow = 0
for key in dict:
   wow += dict[key]['battles']

O incluso puede simplificar el código utilizando una comprensión de Python:

wow = sum(dict[key]['battles'] for key in dict)
1
lmiguelvargasf 16 feb. 2017 a las 01:37

Este es un duplicado de esta pregunta: Iterando sobre diccionarios usando bucles 'for'

La clave es solo un nombre de variable.

  for key in d:

Simplemente recorrerá las claves del diccionario, en lugar de las claves y los valores. Para recorrer tanto la clave como el valor, puede usar lo siguiente:

Para Python 2.x:

  for key, value in d.iteritems():
        wow += value["battles"]

Para Python 3.x:

  for key, value in d.items():
1
Community 23 may. 2017 a las 11:53