使用 Python 將鍵分組到值列表中
將鍵分組到值的過程是根據特定屬性或標準對資料進行分類的過程。例如,假設您有一個學生資料集,並且您希望按其成績對他們進行分組。這種分組使我們能夠輕鬆地分別分析和對每個類別執行計算。在 Python 中,我們可以透過多種方式將鍵分組到值列表中,例如使用字典、defaultdict 和itertools.groupby。在本文中,我們將瞭解如何使用這些方法將鍵分組到值列表中。
方法 1:使用字典
我們可以使用 Python 中的字典輕鬆地將鍵分組到值。讓我們考慮一個示例,其中我們有一個水果列表,並且我們希望根據其顏色對它們進行分組。
語法
list_name.append(element)
這裡,append() 函式是用於將元素新增到 list_name 末尾的列表方法。它透過將指定的元素作為新專案新增到列表中來修改原始列表。
示例
在下面的示例中,我們遍歷水果列表並提取每個水果的顏色。然後,我們檢查顏色是否已存在於 grouped_fruits 字典中。如果存在,我們將水果附加到該顏色的現有水果列表中。否則,我們將使用當前水果建立一個新列表,並將其分配給相應的顏色。
fruits = [ {"name": "Apple", "color": "Red"}, {"name": "Banana", "color": "Yellow"}, {"name": "Grapes", "color": "Green"}, {"name": "Orange", "color": "Orange"}, {"name": "Blueberry", "color": "Blue"}, {"name": "Strawberry", "color": "Red"}, ] grouped_fruits = {} for fruit in fruits: color = fruit["color"] if color in grouped_fruits: grouped_fruits[color].append(fruit) else: grouped_fruits[color] = [fruit] print(grouped_fruits)
輸出
{ 'Red': [{'name': 'Apple', 'color': 'Red'}, {'name': 'Strawberry', 'color': 'Red'}], 'Yellow': [{'name': 'Banana', 'color': 'Yellow'}], 'Green': [{'name': 'Grapes', 'color': 'Green'}], 'Orange': [{'name': 'Orange', 'color': 'Orange'}], 'Blue': [{'name': 'Blueberry', 'color': 'Blue'}] }
方法 2:使用 defaultdict 進行分組
我們可以使用 Python collections 模組中的 defaultdict 實現更有效的解決方案。defaultdict 會自動為不存在的鍵初始化一個值,從而使我們無需顯式檢查和建立列表。
語法
groups = defaultdict(list) groups[item].append(item)
這裡,defaultdict(list) 使用 collections 模組中的 defaultdict 類建立了一個名為 groups 的類似字典的物件。groups[item].append(item) 將一個專案附加到與 groups 字典中鍵 item 關聯的列表中。透過使用方括號 [] 使用 groups[item] 訪問字典,它會在鍵 item 已存在的情況下檢索現有列表,或者在第一次遇到 item 時建立一個新的空列表作為值。
示例
在下面的示例中,我們建立了一個名為grouped_fruits 的defaultdict,其預設值使用defaultdict(list) 設定為空列表。現在,無論何時我們訪問不存在的鍵,它都會自動將空列表初始化為值。這簡化了分組過程,因為我們不需要單獨處理鍵的存在。
from collections import defaultdict fruits = [ {"name": "Apple", "color": "Red"}, {"name": "Banana", "color": "Yellow"}, {"name": "Grapes", "color": "Green"}, {"name": "Orange", "color": "Orange"}, {"name": "Blueberry", "color": "Blue"}, {"name": "Strawberry", "color": "Red"}, ] grouped_fruits = defaultdict(list) for fruit in fruits: grouped_fruits[fruit["color"]].append(fruit) print(dict(grouped_fruits))
輸出
{ 'Red': [{'name': 'Apple', 'color': 'Red'}, {'name': 'Strawberry', 'color': 'Red'}], 'Yellow': [{'name': 'Banana', 'color': 'Yellow'}], 'Green': [{'name': 'Grapes', 'color': 'Green'}], 'Orange': [{'name': 'Orange', 'color': 'Orange'}], 'Blue': [{'name': 'Blueberry', 'color': 'Blue'}] }
方法 3:使用 itertools.groupby 進行分組
我們可以使用 Python itertools 模組中的 groupby 函式輕鬆地將鍵分組到值。此函式允許我們根據鍵函式對可迭代物件中的元素進行分組。
語法
list_name.append(element)
這裡,append() 函式是用於將元素新增到 list_name 末尾的列表方法。它透過將指定的元素作為新專案新增到列表中來修改原始列表。
itertools.groupby(iterable, key=None)
這裡,groupby() 方法將可迭代物件作為輸入,並帶有一個可選的鍵函式。它返回一個迭代器,該迭代器生成包含可迭代物件中連續鍵和組的元組。鍵函式用於確定分組標準。
示例
在下面的示例中,我們定義了一個名為key_function 的鍵函式,該函式根據數字的奇偶性將其分類為“偶數”或“奇數”。然後,我們使用groupby 根據此鍵函式對數字進行分組。groupby 函式返回一個迭代器,該迭代器提供鍵和分組元素的迭代器。我們將迭代器轉換為列表,並將其作為grouped_numbers 字典中的值。
from itertools import groupby numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] grouped_numbers = {} key_function = lambda x: "Even" if x % 2 == 0 else "Odd" for key, group in groupby(numbers, key_function): grouped_numbers[key] = list(group) print(grouped_numbers)
輸出
{'Odd': [9], 'Even': [10]}
結論
在本文中,我們討論瞭如何在 Python 中使用不同的方法將鍵分組到值列表中。我們首先使用字典,其中我們手動檢查鍵是否存在並建立列表作為值。然後,我們使用了 defaultdict,它透過自動為不存在的鍵初始化值來簡化分組過程。此外,我們探討了 itertools.groupby,這是一個強大的函式,允許根據鍵函式進行分組。