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