Python – 按第 K 個索引元素分組元組


在 Python 中,我們可以使用多種方法根據第 k 個索引元素對元組進行分組,例如使用字典、利用 `itertools` 模組中的 `groupby()` 函式以及使用 `collections` 模組中的 `defaultdict`。根據第 k 個索引分組元組在資料分析和資料操作中非常有用。在本文中,我們將探討根據其第 k 個索引元素對元組進行分組的不同方法,使用各種技術並演示其實現。

方法 1:使用字典

一種對元組進行分組的直接方法是使用字典。其思想是遍歷元組列表,並使用第 k 個索引元素作為字典中的鍵。與每個鍵關聯的值將是一個列表,其中包含具有相同第 k 個索引元素的元組。

語法

list_name.append(element)

這裡,`append()` 函式用於在列表的末尾新增一個元素。它接受要新增到列表末尾的元素。

示例

在下面的示例中,我們有一個元組列表,其中每個元組包含一個水果名稱和相應的數量。我們希望按水果名稱(即第 0 個索引元素)對這些元組進行分組。透過呼叫 `group_tuples_by_kth_index` 函式並傳入列表和 `k=0`,我們得到一個字典,其中鍵是唯一的水果名稱,值是包含具有相同水果名稱的元組的列表。

def group_tuples_by_kth_index(tuples, k):
    groups = {}
    for t in tuples:
        key = t[k]
        if key not in groups:
            groups[key] = []
        groups[key].append(t)
    return groups

# Example usage
tuples_list = [('apple', 10), ('banana', 20), ('apple', 15), ('banana', 25), ('cherry', 30)]
k = 0

result = group_tuples_by_kth_index(tuples_list, k)

print(result)

輸出

{'apple': [('apple', 10), ('apple', 15)], 'banana': [('banana', 20), ('banana', 25)], 'cherry': [('cherry', 30)]}

方法 2:使用 `itertools.groupby()`

Python 中的 `itertools` 模組提供了一個名為 `groupby()` 的有用函式,它可以根據特定條件對可迭代物件中的元素進行分組。要將其用於分組元組,我們需要先根據第 k 個索引元素對元組列表進行排序,然後再將其傳遞給 `groupby()`。

語法

list_name.append(element)

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

itertools.groupby(iterable, key=None)

這裡,返回型別是一個迭代器,它生成包含連續鍵和組的元組。每個元組都包含一個鍵和一個對應組中元素的迭代器。

示例

在下面的示例中,我們從 `itertools` 模組匯入 `groupby` 函式。`group_tuples_by_kth_index` 函式首先使用 `sorted()` 函式和 lambda 函式作為鍵,根據第 k 個索引元素對元組進行排序。然後,使用 `groupby()`,我們根據相同的第 k 個索引元素對排序後的元組進行分組。最後,我們將分組的元素轉換為字典,其中鍵是唯一的第 k 個索引元素,值是元組列表。

from itertools import groupby

def group_tuples_by_kth_index(tuples, k):
    sorted_tuples = sorted(tuples, key=lambda x: x[k])
    groups = {key: list(group) for key, group in groupby(sorted_tuples, key=lambda x: x[k])}
    return groups

# Example usage
tuples_list = [('apple', 10), ('banana', 20), ('apple', 15), ('banana', 25), ('cherry', 30)]
k = 0

result = group_tuples_by_kth_index(tuples_list, k)

print(result)

輸出

{'apple': [('apple', 10), ('apple', 15)], 'banana': [('banana', 20), ('banana', 25)], 'cherry': [('cherry', 30)]}

方法 3:使用 `defaultdict`

`collections` 模組中的 `defaultdict` 類是另一個用於分組元組的有用工具。它會在訪問不存在的鍵時自動為每個鍵建立一個新列表,從而無需進行顯式檢查。

語法

groups = defaultdict(list)
groups[item].append(item)

這裡,`collections` 模組中的 `defaultdict()` 函式建立一個名為 `groups` 的 `defaultdict` 物件,該物件最初包含一個空列表。`groups[item].append(item)` 使用鍵 (item) 來訪問與 `groups` 字典中該鍵關聯的列表,並將專案附加到該列表。

示例

在下面的示例中,我們從 `collections` 模組匯入 `defaultdict`。我們用列表型別初始化一個 `defaultdict`,這確保任何不存在的鍵都將自動建立一個空列表作為值。透過遍歷元組並將它們附加到相應的鍵,我們實現了所需的分組。

from collections import defaultdict

def group_tuples_by_kth_index(tuples, k):
    groups = defaultdict(list)
    for t in tuples:
        groups[t[k]].append(t)
    return groups

# Example usage
tuples_list = [('apple', 10), ('banana', 20), ('apple', 15), ('banana', 25), ('cherry', 30)]
k = 0

result = group_tuples_by_kth_index(tuples_list, k)

print(result)

輸出

defaultdict(, {'apple': [('apple', 10), ('apple', 15)], 'banana': [('banana', 20), ('banana', 25)], 'cherry': [('cherry', 30)]})

結論

在本文中,我們討論瞭如何使用 Python 方法根據第 k 個索引元素對元組進行分組。我們探討了三種不同的方法:使用字典、利用 `itertools` 模組中的 `groupby()` 函式以及使用 `collections` 模組中的 `defaultdict`。每種方法都有其自身的優勢,選擇哪種方法取決於手頭任務的具體要求。

更新於:2023年7月19日

170 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告