Печать произведения чисел из Nested Dictionary - PullRequest
0 голосов
/ 17 октября 2019
db = {'A':{(1,2): 3, (4,5): 6, (7,8): 9}, 'B': {(9,8):7, (6,5): 4, (3,2): 1 }}

У меня есть словарь БД, и я пытаюсь напечатать значения, но мой код не работает. Я знаю, что это как-то связано с i.keys в функции печати, но как мне заставить его печатать правильный продукт.

for i in db.values():
    for x in i.keys():
        if x[1] >= 1:
            print(x[1]*i.values)

он должен печатать:

6
30
72
56
20
2

Ответы [ 3 ]

1 голос
/ 17 октября 2019

Ниже решение напечатает список, содержащий произведение двух чисел (кортежа) внутри списка, и я надеюсь, что внутри каждого кортежа будет только два числа.

List comprehension упрощает код и уменьшает числострок кода.

value = [  x[0].__mul__(x[1]) for i in db.values() for x in i.keys() ]

Выход

[2, 20, 56, 72, 30, 6]
0 голосов
/ 17 октября 2019

Вы можете использовать функцию reversed для генерации значений dict и ключей поддиктов в обратном порядке:

for d in reversed(db.values()):
    for a, b in reversed(d):
        print(a * b)

Это выводит:

6
30
72
56
20
2
0 голосов
/ 17 октября 2019

В строке 4 переменная i представляет собой словарь, поэтому при выполнении x[1]*i.values вы умножаете целое число (x[1]) на встроенный метод values из dict. Даже если вы поставите скобки, i.values() вернет коллекцию значений из вашего текущего словаря второго уровня. Поэтому вам нужно использовать ключ x, чтобы i[x] вернул целое число:

for i in db.values():
    for x in i.keys():
        if x[1] >= 1:
            print(x[1]*i[x])

Другой способ решения вашей проблемы:

for i in db.values():
    for (_, j), value in i.items():
        if j >= 1:
            print(j*value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...