繁体   English   中英

从列表中的字典中获取值的总和

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM