问题的提出和解决方案概述
在这篇文章中,你将学习如何在Python中对字典值进行求和。
为了使它更有趣,我们有以下的运行场景。
作为一个Python自由职业者,你想知道你在过去几个月里赚了多少钱。这个数据是以Dictionary格式存储的。这个总数可以通过对Dictionary的值进行加总(统计)来找到。
问题是。我们如何在 Python 中写 Python 代码来对 Dictionary 的值进行求和?
我们可以通过下面的一个方案来完成这个任务。
- 方法1:使用
sum()和dict.values() - 方法2:使用
sum()和一个生成器表达式 - 方法3:使用
functools.reduce()和一个Lambda - 方法4:使用
sum()和[list()](https://blog.finxter.com/python-list/) - 方法 5: 使用一个简单的
for循环并进行汇总
方法 1: 使用 sum() 和 dict.values()
你可以使用函数 sum()和 dict.values()来对一个 Python 字典中的所有值进行求和,表达式为sum(dict.values()) 。
下面是如何适用于我们的例子情景。
wages = {'01': 910.56, '02': 1298.68, '03': 1433.99, '04': 1050.14, '05': 877.67}
total = sum(wages.values())
print('Total Wages: ${0:,.2f}'.format(total))
这段代码声明了一个字典,wages ,包含五(5)个月收入的键:值对。
上面的选项1统计了提取的值并保存到total 。然后使用 format()来修改输出,以显示美元符号 ($)、逗号 (如果需要),并将输出限制在两(2)位小数。
| 工资总额:5,571.04美元 |
或者
total = round(sum(wages.values()), 2)
print(total)
上面的选项2对提取的值进行统计,将结果四舍五入到小数点后两位,并保存到total 。结果如实输出到终端。
| 5571.04 |
方法2:使用sum()和生成器表达式
你可以将内置的 sum()函数与一个简单的生成器表达式结合起来,用表达式sum(my_dict[item] for item in my_dict) 对 Python 字典中的所有值进行求和。
下面是这个例子。
wages = {'01': 910.56, '02': 1298.68, '03': 1433.99, '04': 1050.14, '05': 877.67}
total = sum(wages[item] for item in wages)
print('Total Wages: ${0:,.2f}'.format(total))
这段代码声明了一个字典,wages ,包含五(5)个月收入的键:值对。
一个单行的for 循环被用来浏览每个字典的项目(值)并统计这些项目。结果保存在total 。
然后。 format()用于修改输出,以显示美元符号 ($)、逗号 (如果需要),并将输出限制在两 (2) 位小数。
| 工资总额:5,571.04美元 |
方法3:使用Lambda
另一种对Python字典值求和的方法是使用 [functools.reduce()](https://blog.finxter.com/the-reduce-function-in-python-3-simply-explained/)方法与表达式中的lambda 函数相结合,functools.reduce(lambda tot, v: tot+my_dict[v], my_dict, 0) 。
下面是在我们的例子情景中的情况。
wages = {'01': 910.56, '02': 1298.68, '03': 1433.99, '04': 1050.14, '05': 877.67}
total = functools.reduce(lambda tot, v: tot+wages[v], wages, 0)
print(total)
首先,这段代码声明了一个字典,wages ,包含五(5)个月收入的键:值对。
然后,该 functools.reduce()函数与Lambda一起使用来统计工资。这个结果保存到total ,并按原样输出到终端。
输出
| 5571.04 |
方法4:使用一个生成器
要对一个 Python 字典中的所有值进行求和,可以使用 sum()以及用my_dict.values() 得到的字典值的列表表示,并使用 [list()](https://blog.finxter.com/python-list/)来进行转换。
wages = {'01': 910.56, '02': 1298.68, '03': 1433.99, '04': 1050.14, '05': 877.67}
print(sum(list(wages.values())))
首先,这段代码声明了一个字典,wages ,包含五(5)个月收入的键:值对。
然后,将这些值转换为列表格式。最后,将 sum()函数应用于这个List并输出到终端。
输出
| 5571.04 |
方法 5:简单的 For 循环
你可以通过使用for 循环遍历所有的字典值并逐一相加来求得 Python 字典中的所有值。
这里是我们的运行实例。
wages = {'01': 910.56, '02': 1298.68, '03': 1433.99,
'04': 1050.14, '05': 877.67}
total = 0
for value in wages.values():
total += value
print(total)
# 5571.04
然而这并不是最Pythonic的方法。一个生成器表达式会更简明,更易读。
总结
这四(4)种求和字典值的方法应该给你足够的信息来选择最适合你编码要求的方法。
祝您好运,编码愉快!