Как получить значение из словаря - PullRequest
1 голос
/ 30 января 2020
a = dict()
uid1 = 1
uid2 = 2
a[uid1] = {}
a[uid2] = {}
iid1 = 45
iid2 = 98
iid3 = 3
iid4 = 82
iid5 = 11
a[uid1][iid1] = 125
a[uid2][iid2] = 7
a[uid1][iid3] = 4
a[uid2][iid4] = 10
a[uid2][iid5] = 20

получить:

{1: {45: 125, 3: 4}, 2: {98: 7, 82: 10, 11: 20}}

То, что я хочу получить, это рассчитать сумму 125 + 4 = 129 и 7 + 10 + 20 = 37

I ' мы пробовали это:

for u,items in a.items():
    for i,counts in items.items():
        for count in counts:
            print(count)

получил уведомление вроде этого:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-48-8b6a2dace81e> in <module>
      1 for u,items in a.items():
      2     for i,counts in items.items():
----> 3         for count in counts:
      4             print(count)

TypeError: 'int' object is not iterable

Теперь я не знаю, как действовать.

Ответы [ 3 ]

0 голосов
/ 30 января 2020

Вот как вы можете рассчитать свой результат:

result = [sum(dct.values()) for dct in a.values()]
print(result) # [129, 37]

Проблема в вашем коде следующая:

for u,items in a.items():
    for i,counts in items.items():
        print(counts) # it prints 125, 4, 7, 10, 20

В вашем коде вы пытаетесь повторить counts, что int число

0 голосов
/ 30 января 2020

Это просто, попробуйте в одной строке.

a = {1: {45: 125, 3: 4}, 2: {98: 7, 82: 10, 11: 20}}
print([sum(values.values()) for key,values in a.items()])
0 голосов
/ 30 января 2020

Вы действительно близки

for u,items in a.items():
    print(sum(items.values()))

129
37

Объяснение

Ошибка возникает при вызове counts.values ​​(). Для каждой итерации вашей первой l oop элементы - это словарь.

for u, items in a.items():
    print(items)

{45: 125, 3: 4}
{98: 7, 82: 10, 11: 20}

Вы можете увидеть, что подсчитано с вашим следующим счетом l oop

for u,items in a.items():
    for i, count in items.items():
        print(count)

125
4
7
10
20

целое число. Если вы хотите сохранить свою структуру l oop, вы можете сделать

for u,items in a.items():
    sum = 0
    for i, count in items.items():
        sum += count
    print(sum)

129
37
...