Используя цикл for, Вычислите сумму значений в этом словаре и не используйте функцию sum()

#python #python-3.x #dictionary #for-loop #sum

Вопрос:

Используя цикл for, Вычислите сумму значений в этом словаре и не используйте функцию sum ()?

 Dictionary = {"001": {"a" : [1, 5, 6], "b" : [2, 8, 9] }, "002": {"c" : [6.89, 5.67, 1.24], "d" : [9.32, 6, 78] }}
 

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

 TypeError: unsupported operand type(s) for  : 'int' and 'dict'
 

Спасибо!

Комментарии:

1. Покажите нам несколько попыток кода

2. хотите получить сумму всех чисел? или вам нужен список, содержащий суммы каждого индекса в каждом из списков номеров? (все они имеют длину 3, что заставляет меня спросить об этом)

3. Не могли бы вы поподробнее, пожалуйста

Ответ №1:

Используйте вложенный цикл в соответствии со структурой данных:

 total = 0

for dct in Dictionary.values():  # the outermost dict's values are dicts again ...
    for lst in dct.values():     # ... whose values are lists ...
        for num in lst:          # ... whose elements are addable numbers
            total  = num

total
# 138.12
 

Комментарии:

1. dicti3 = {«001»: {«a» : [1, 5, 6], «в» : [2, 8, 9] }, «002»: {«c» : [6.89, 5.67, 1.24], «d» : [9.32, 6, 78] }} всего = 0 для dct в дикти3.значения(): для lst в дикти3.значения(): для num в lst: всего = печать номера(всего) Трассировка ошибок типа (последний последний вызов) <ipython-input-26-3bf2629ab373> в <ipython-input-26-3bf2629ab373><модуль> 6 для lst в дикти3.значения(): 7 для num в lst: — — — — <модуль>> 8 всего = число 9 10 печать(всего) Ошибка типа: неподдерживаемые типы операндов для =: ‘int’ и ‘str’

2. Спасибо за ваш ответ, но я все равно получил ошибку, как показано выше

3. Вы неправильно его скопировали: for lst in dicti3... должно быть for lst in dct... .

4. Ах, я вижу, изначально в моем коде была ошибка, поэтому я его изменил. вы правы. Это сработало, спасибо.

5. так почему же общая сумма здесь отличается от приведенной ниже, которая составляет 24,67, это потому, что его метод использует только числовые значения ? Спасибо.

Ответ №2:

Я думаю, что вы пытались суммировать словарь с помощью операнда Вместо этого вам нужно получить каждое отдельное число внутри списка (напомните, что список находится внутри словаря, а этот словарь находится внутри другого). Поэтому я делаю петлю for:

 Dictionary = {"001": {"a": [1, 5, 6], "b": [2, 8, 9]}, "002": {"c": [6.89, 5.67, 1.24], "d": [9.32, 6, 78]}}
for c in range(0, len(Dictionary['001'])):
    l1 = Dictionary['001']['a']
    l2 = Dictionary['001']['b']
    som1 = l1[c]   l2[c]
for c in range(0, len(Dictionary['002'])):
    l1 = Dictionary['002']['c']
    l2 = Dictionary['002']['d']
    som2 = l1[c]   l2[c]
somt = som1   som2
print(somt)
 

Комментарии:

1. Большое вам спасибо за вашу помощь. Это сработало

2. так почему же общая сумма здесь отличается от приведенной ниже, которая составляет 138

3. Это совсем не решает проблему. Вы продолжаете переопределять som1 и som2 в соответствующих циклах. Кроме того, вы зацикливаетесь на диапазонах, соответствующих длине внутреннего диктатора, которая такова 2 . Следовательно, конечным результатом является сумма всех элементов второго списка: 5 8 5.67 6