(Python) Функция для поиска суммы значений из указанного ключа c во вложенном словаре - PullRequest
0 голосов
/ 14 марта 2020

edit: ошибка, которую я получил, показана ниже. Большое спасибо всем за помощь. Я новичок в Python и провел несколько часов, исследуя это безрезультатно. Я действительно ценю вашу помощь.

Ошибка типа: индексы списка должны быть целыми числами или кусочками, а не str

Используя словарь ниже, мне нужно найти сумму всех объединенных величин ( 1 + 3 + 3 + 1 + 9 = 17).

shopping_cart = {
    "tax": .08,
    "items": [
        {
            "title": "orange juice",
            "price": 3.99,
            "quantity": 1
        },
        {
            "title": "rice",
            "price": 1.99,
            "quantity": 3
        },
        {
            "title": "beans",
            "price": 0.99,
            "quantity": 3
        },
        {
            "title": "chili sauce",
            "price": 2.99,
            "quantity": 1
        },
        {
            "title": "chocolate",
            "price": 0.75,
            "quantity": 9
        }
    ]
}

Лучшая функция, которую я мог придумать, показана ниже, но я получаю ошибку. Любая помощь приветствуется. Спасибо.

def total_number_of_items(d):
    return sum(d['items']['quantity'])

Ответы [ 3 ]

2 голосов
/ 14 марта 2020

Поскольку shopping_cart['items'] является списком, вам нужно использовать понимание списка (или подобное) для извлечения отдельных величин для суммирования:

def total_number_of_items(d):
    return sum([item['quantity'] for item in d['items']])

print(total_number_of_items(shopping_cart))

Вывод

17

Демонстрация на rextester

0 голосов
/ 14 марта 2020
def tot(d):    
    print(sum([i['quantity'] for i in d['items']]))
0 голосов
/ 14 марта 2020

Я могу дать вам прямой ответ:

In [42]: functools.reduce(lambda i, j: i+j["quantity"], shopping_cart["items"], 0)                                                                                                                                                                           
Out[42]: 17

Но вы должны быть предельно ясны в своем вопросе и ошибке, с которой вы столкнулись. Пожалуйста, следуйте рекомендациям сообщества и StackOverflow { ссылка } Я вижу, вы новичок в Stackoverflow и, возможно, еще не знакомы с ним.

...