使用 Python 將鍵分組到值列表中


將鍵分組到值的過程是根據特定屬性或標準對資料進行分類的過程。例如,假設您有一個學生資料集,並且您希望按其成績對他們進行分組。這種分組使我們能夠輕鬆地分別分析和對每個類別執行計算。在 Python 中,我們可以透過多種方式將鍵分組到值列表中,例如使用字典、defaultdictitertools.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_fruitsdefaultdict,其預設值使用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,這是一個強大的函式,允許根據鍵函式進行分組。

更新於:2023-07-17

2K+ 閱讀量

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告