Python – 多键分组求和
给定的问题陈述是获取给定元组列表中相同键的分组求和。因此,我们将使用 Python 功能来编写此问题的程序。
理解问题
手头的问题是根据多个键计算给定输入列表数据中值的总和,此过程称为多键分组求和。因此,我们将获得带有键值对的数据。我们的任务是根据多个键对值进行分组,并且我们必须计算给定列表中每个组的总和。
上述问题的逻辑
为了解决这个问题,我们将使用字典来保存当前组的累加和。我们将遍历列表数据并获取键值。借助键,我们将为每个组的相应值添加到累积总和中。如果字典中不存在特定值的组,则我们将从当前值开始。最后,我们将拥有给定列表数据中每个组的总和。
算法
步骤 1 − 首先,我们将导入必要的模块。因此,从 Python 的 collections 模块导入 defaultdict 类。
步骤 2 − 然后初始化包含输入数据的 list_data。
步骤 3 − 之后,创建一个空的 defaultdict 作为 grouped_sum,其初始值为 0。
步骤 4 − 接下来,迭代列表元组中的每个数据。并从元组中获取键值。
步骤 5 − 还提取与元组关联的值。并将该值添加到 grouped_sum 中相应键的累积求和中。
步骤 6 − 然后,我们将通过遍历 grouped_sum 中的项创建一个新的列表 Output,对于每个键值对,我们将创建一个包含总和值的新元组。
步骤 7 − 打印初始输入列表和 Output 列表以显示多键分组求和。
示例
# Import the defaultdict
from collections import defaultdict
# Initialize the list data
list_data = [
(1000, 2022, 1),
(1500, 2022, 2),
(2000, 2022, 1),
(500, 2023, 3),
(800, 2023, 1),
(1200, 2023, 1),
(1500, 2023, 3)
]
print("The input list is: " + str(list_data),'\n')
grouped_sum = defaultdict(int)
for data in list_data:
# Get the key values and also value
key = data[1:3]
value = data[0]
grouped_sum[key] += value
Output = [(key[0], key[1], value) for key, value in grouped_sum.items()]
# Printing the Output
print("The Multiple Keys Grouped Summation: " + str(Output))
输出
The input list is: [(1000, 2022, 1), (1500, 2022, 2), (2000, 2022, 1), (500, 2023, 3), (800, 2023, 1), (1200, 2023, 1), (1500, 2023, 3)] The Multiple Keys Grouped Summation: [(2022, 1, 3000), (2022, 2, 1500), (2023, 3, 2000), (2023, 1, 2000)]
复杂度
如果输入数据中的键值对数为 n,则计算具有相同键的值的总和的时间复杂度为 O(n)。因为我们迭代了每一对一次,并执行了恒定时间操作以获得所需的总和或值。
结论
我们有效地实现了多键分组求和代码,借助字典保存每个键值对的累积和。我们使用了 Python collections 模块中名为 defaultdict 的内置类。代码的时间复杂度为 O(n)。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP