функция суммирования итоговых значений в словаре - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть dict с несколькими записями для значения.

   inventory = {847502: ['APPLES 1LB', 2, 50], 847283: ['OLIVE OIL', 1, 100], 839529: ['TOMATOS 1LB', 4, 25], 
                 483946: ['MILK 1/2G', 2, 50], 493402: ['FLOUR 5LB', 2, 50], 485034: ['BELL PEPPERS 1LB', 3, 50]}

Я хочу создать функцию для получения суммы значений элементов, т.е.сумма ((2 * 50) + (1 * 100) и т. д ...) Я думаю, что я почти там, но это, кажется, только добавляет первое значение ....

def total_and_number(dict):
    for values in dict.values():
        #print(values[1]*values[2])
        total =0
        total += (values[1]* values[2])
        return(total)


total_and_number(inventory)

Ответы [ 6 ]

0 голосов
/ 29 ноября 2018

Похоже, что каждое значение является списком (хотя, вероятно, это должен быть кортеж):

itemname, qty, eachprice

Так что должно быть достаточно легко выполнить итерацию и суммировать напрямую:

sum(qty*eachprice for _, qty, eachprice in inventory.values())
0 голосов
/ 29 ноября 2018

Попробуйте это:

x = {
    847502: ['APPLES 1LB', 2, 50], 847283: ['OLIVE OIL', 1, 100], 839529: ['TOMATOS 1LB', 4, 25], 
    483946: ['MILK 1/2G', 2, 50], 493402: ['FLOUR 5LB', 2, 50], 485034: ['BELL PEPPERS 1LB', 3, 50]
}

print(sum([x[i][1]*x[i][2] for i in x.keys()]))

выход:

C:\Users\Desktop>py x.py
650

РЕДАКТИРОВАТЬ: Для вашего собственного кода вам нужно вынуть total=0 и return total из цикла.

def total_and_number(dict):
    total = 0
    for values in dict.values():
        total += (values[1]*values[2])
    return(total)


print(total_and_number(x))

Вывод:

C:\Users\Desktop>py x.py
650
0 голосов
/ 29 ноября 2018

Вы должны попытаться получить доступ к элементам через их ключевые значения:

def total_and_number(dictis):
    total = 0
    for key in list(dictis.keys()):
        print(key)
        total += (dictis[key][1]*dictis[key][2])
    return(total)

Возвращает ожидаемое значение, которое вам нужно.

0 голосов
/ 29 ноября 2018

Возврат и общее количество строк были смещены.Это возвращает 650.

inventory = {847502: ['APPLES 1LB', 2, 50],
             847283: ['OLIVE OIL', 1, 100], 839529: ['TOMATOS 1LB', 4, 25], 
             483946: ['MILK 1/2G', 2, 50], 493402: ['FLOUR 5LB', 2, 50],
             485034: ['BELL PEPPERS 1LB', 3, 50]
}

def total_and_number(dict):
    total = 0
    for values in dict.values():
        total += values[1]*values[2]
    return(total)

total_and_number(inventory)
0 голосов
/ 29 ноября 2018

Вы должны определить переменную сумму вне для кодов цикла.

result = sum([ value[1]*value[2] for value in inventory.values()]

или

def total_and_number(dict):
    total =0
    for values in dict.values():
       #print(values[1]*values[2])
       total += (values[1]* values[2])
    return total
total_and_number(inventory)
0 голосов
/ 29 ноября 2018

Использование:

def total_and_number(d):
    tot = 0
    for k, v in d.items():
        tot += v[1]*v[2]
    return tot

total_and_number(inventory)
...