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)。

更新于:2023年10月17日

68 次浏览

启动您的 职业生涯

完成课程获得认证

开始
广告
© . All rights reserved.