[英]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}]
我需要得到order
的总和并将该总和放入一个名为subtotal
的变量中。 我知道我需要一个 for 循环遍历列表,但不知道如何在每个dict
中获取与"price"
相关的值并将它们加起来。
您可以使用方括号来获取价格:
# Prints out all the prices
for x in order:
print(x['price'])
现在,您所要做的就是将其添加到一个名为subtotal
的变量中
# Adds prices to subtotal and outputs 16.77
subtotal = 0.0
for x in order:
subtotal += x['price']
print(subtotal)
或者,更简单地说:
# Uses a comprehension along with sum (again outputs 16.77)
subtotal = sum(x['price'] for x in order)
print(subtotal)
您可以使用方括号和iadd
操作 (+=) 来做到这一点:
subtotal = 0
for x in price:
subtotal += x["price"]
一种更快的方法是使用sum
函数并使用生成器理解,正如@bd 的评论中所建议的那样:
subtotal = sum(x["price"] for x in price)
我在@JudeDavis 看到了这个答案,他也使用列表理解来做到这一点:
subtotal = sum([x["price"] for x in price])
它实际上与上面提供的代码相同,但通过解释器优化,生成器理解更快,长话短说,该列表具有 2 个功能:
但是元组仅支持非唯一项,因此通过 python 完成一些优化(不详细介绍),速度会更快一些。
使用内置的sum
函数对列表求和,我们使用列表推导式创建列表。
subtotal = sum([d["price"] for d in order])
再会。
使用内置的sum
函数进行求和。
但是不要对列表求和,而是使用生成器来优化代码。
subtotal = sum(d["price"] for d in order)
PS:请注意 sum 函数不是在列表上执行的(而是一个生成器) ,就像@JudeDavis 提供的答案一样
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.