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 次瀏覽

啟動您的 職業生涯

完成課程獲得認證

開始
廣告