Thamblen22
Thamblen22

Reputation: 13

Getting sum of values from Dicts in a List

order = [{"name": 'espresso', "price": 1.99},
         {"name": 'coffee', "price": 2.50},
         {"name": 'cake', "price": 2.79},
         {"name": 'soup', "price": 4.50},
         {"name": 'sandwich', "price": 4.99}]

I need to get the sum of the order and put that sum in a variable called subtotal. I understand I need a for loop through the list but don't know how to grab the value associated with "price" in each dict and sum them all up.

Upvotes: 1

Views: 803

Answers (4)

Rohith
Rohith

Reputation: 87

Use the built-in sum function to sum it up.

But instead of summing over a list, use a generator instead for optimized code.

subtotal = sum(d["price"] for d in order)

PS: Notice that the sum function is not performed on a list (and is a generator instead) like in the answer provided by @JudeDavis

Upvotes: 0

XxJames07-
XxJames07-

Reputation: 1826

you can do that using square brackets and the iadd operation (+=):

subtotal = 0
for x in price:
    subtotal += x["price"]

A faster way of accomplishing that would also be to use the sum function and using a generator comprehension that is faster as suggested in the comments by @b.d:

subtotal = sum(x["price"] for x in price)

on other answers

I saw this by @JudeDavis the answers one who does it also using list comprehension:

subtotal = sum([x["price"] for x in price])

it's literally the same thing as the code provided above but by interpreter optimizations the generator comprehension is faster long story short, the list has 2 features:

  • mutable
  • supports non-unique items

but the tuple supports only non-unique items so it's a little bit faster with some optimization done by python(not getting into details).

Upvotes: 1

The Thonnu
The Thonnu

Reputation: 3624

You can use square brackets to get the price:

# Prints out all the prices
for x in order:
    print(x['price'])

Now, all you have to do is add this to a variable called subtotal

# Adds prices to subtotal and outputs 16.77
subtotal = 0.0
for x in order:
    subtotal += x['price']
print(subtotal)

Or, more simply:

# Uses a comprehension along with sum (again outputs 16.77)
subtotal = sum(x['price'] for x in order)
print(subtotal)

Upvotes: 2

Jude Davis
Jude Davis

Reputation: 148

Use the built-in sum function to sum the list, and we create the list using list comprehension.

subtotal = sum([d["price"] for d in order])

Good day.

Upvotes: 0

Related Questions