Python - 將元組列表分組到字典中


在Python中,我們可以使用不同的方法將元組列表分組到字典中,例如使用for迴圈和條件語句、使用collections模組中的defaultdict類以及使用itertools模組中的groupby()函式。本文將探討所有這些方法,並實現它們以將元組列表分組到字典中。

方法一:使用for迴圈和條件語句

此方法涉及使用for迴圈迭代元組列表。我們將檢查字典中是否存在鍵,並將相應的元組作為值新增到該鍵。如果鍵不存在,我們將在字典中建立一個新的鍵值對。

語法

list_name.append(element)

這裡,append()函式是用於向list_name結尾新增元素的列表方法。它透過將指定的元素作為新項新增到列表中來修改原始列表。

示例

在下面的示例中,我們有一個名為data的元組列表。我們初始化一個名為result的空字典。我們使用for迴圈迭代data列表中的每個元組。對於每個元組,我們使用索引提取鍵和值。如果鍵已存在於result字典中,我們將值附加到與該鍵關聯的現有列表中。否則,我們將在result字典中建立一個新的鍵值對,鍵為提取的鍵,值為包含提取值的列表。最後,我們列印結果字典。

data = [('apple', 5), ('banana', 3), ('apple', 2), ('cherry', 7), ('banana', 1)]
result = {}

for item in data:
    key = item[0]
    value = item[1]
    if key in result:
        result[key].append(value)
    else:
        result[key] = [value]

print(result)

輸出

{'apple': [5, 2], 'banana': [3, 1], 'cherry': [7]}

方法二:使用collections模組中的defaultdict類

此方法使用collections模組中的defaultdict類。defaultdict為不存在的鍵提供預設值,使其方便資料分組。

語法

groups = defaultdict(list)

這裡,語法使用collections模組中的defaultdict()函式初始化一個名為groups的defaultdict物件,其預設值為一個空列表。第二行程式碼使用鍵(item)訪問groups字典中與該鍵關聯的列表,並將item附加到該列表。

示例

在下面的示例中,我們從collections模組匯入defaultdict類。我們將result變數初始化為一個defaultdict,其預設值設定為一個空列表。其餘程式碼與第一種方法類似,我們迭代data列表中的每個元組,提取鍵和值,並將值附加到result字典中相應的鍵。最後,在列印之前,我們使用dict()函式將result defaultdict轉換為常規字典。

from collections import defaultdict

data = [('apple', 5), ('banana', 3), ('apple', 2), ('cherry', 7), ('banana', 1)]
result = defaultdict(list)

for item in data:
    key = item[0]
    value = item[1]
    result[key].append(value)

print(dict(result))

輸出

{'apple': [5, 2], 'banana': [3, 1], 'cherry': [7]}

方法三:使用itertools模組中的groupby()函式

此方法涉及使用itertools模組中的groupby()函式。groupby()函式根據鍵函式對可迭代物件的元素進行分組。

語法

 groups[key] = list(group)

這裡,itertools模組中的groupby()函式迭代groupby物件。該函式返回鍵和一組具有相同值的連續項。然後使用鍵和組在groups字典中建立鍵值對,其中鍵是唯一值,值是分組項的列表。

示例

在下面的示例中,我們從itertools模組匯入groupby()函式。在使用groupby()之前,我們使用lambda函式根據鍵對data列表進行排序。此步驟至關重要,因為groupby()期望具有相同鍵的連續元素在可迭代物件中相鄰。然後,我們迭代groupby()生成的組。對於每個組,我們提取鍵並建立一個與該鍵關聯的值列表。最後,我們將鍵值對儲存在result字典中並列印它。

from itertools import groupby

data = [('apple', 5), ('banana', 3), ('apple', 2), ('cherry', 7), ('banana', 1)]
result = {}

data.sort(key=lambda x: x[0])  # Sort the data based on the key

for key, group in groupby(data, key=lambda x: x[0]):
    result[key] = [item[1] for item in group]

print(result)

輸出

{'apple': [5, 2], 'banana': [3, 1], 'cherry': [7]}

結論

在本文中,我們討論瞭如何使用Python中的各種方法將元組列表分組到字典中。我們探討了三種方法:使用for迴圈和條件語句,使用collections模組中的defaultdict類以及使用itertools模組中的groupby()函式。每種方法都為任務提供了一種解決方案,選擇哪種方法取決於個人喜好和具體需求。

更新於:2023年7月19日

455 次瀏覽

啟動您的職業生涯

完成課程後獲得認證

開始學習
廣告
© . All rights reserved.