2017-02-16 14 views
0

Итак, представьте себе, я получил Dict так:Как добавить все Int значения в Словаре

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 
    } 
} 

и мой код этот код:

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

Проблема заключается в том, что я не уверен, как добавить все битвы сразу. Потому что я получаю эту ошибку:

TypeError: 'int' object is not iterable 

Как исправить это, так что все это все битвы в dict!

+5

'SUM (х [ 'битвы'] для й в Словаре) ' –

+3

На всякий случай это действительно ваш реальный код. Избегайте использования 'dict' для фактического хранения вашего словаря. 'dict' - это встроенный инструмент, который используется для создания словаря. – idjaw

ответ

3

Это то, что вы хотите?

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

Объяснение, если необходимо: dict[id]["battles"] уже возвращает значение INT. Вы пытались перебрать этот int, который не имеет смысла.

+2

Объясните, что они сделали неправильно. Это поможет OP больше понять, почему они делают неправильно. – idjaw

+0

OMG YES, U R BRILLANT. – Cheesezwheel

+0

Положите его в свой ответ. Сделайте его более полным. – idjaw

1

Это дубликат этого вопроса: Iterating over dictionaries using 'for' loops

ключ просто имя переменной.

for key in d: 

будет просто перебирать ключи в словаре, а не ключи и значения. Для цикла по обе ключ и значение, которое вы можете использовать следующее:

Для Python 2.x:

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

для Python 3.x:

for key, value in d.items(): 
+0

Учитывая, что ключ вообще не нужен, 'itervalues ​​()'/'values ​​()' будет еще более прямым. – ShadowRanger

1

Проблема в том, что dict[id]['battles'] является объект типа int, так что это причина, по которой вы получаете ошибку TypeError: 'int' object is not iterable.

Вы можете решить ее:

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

Или вы даже можете упростить код, используя Python понимание:

wow = sum(dict[key]['battles'] for key in dict) 

 Смежные вопросы

  • Нет связанных вопросов^_^