Python - 將元組清單中的第一個元素以第二個元素進行分組

王林
發布: 2023-09-14 15:49:02
轉載
1257 人瀏覽過

Python - 将元组列表中的第一个元素按第二个元素进行分组

在Python 中,可以使用各種方法根據第二個元素的值對元組列表中的元素進行分組,例如使用字典或使用itertools.groupby() 方法以及使用集合中的defaultdict。元組清單中的第一元素按第二元素分組意味著具有相同第二元素的元組可以被分組為單一元素組。在本文中,我們將討論如何實作這些方法,以便我們可以輕鬆地根據元組列表中的第二個元素對第一個元素進行分組。

方法一:使用字典

此方法涉及使用字典對元素進行分組。這種方法利用字典的鍵值對來儲存第一個元素,並使用第二個元素作為鍵。

文法

dict_name[key]
登入後複製

這裡,方括號表示法用於將值指派給字典中的特定鍵。如果鍵已經存在,則將該值附加到與該鍵關聯的清單中;否則,將建立新的鍵值對。

範例

在下面的範例中,我們先初始化一個空字典 grouped_data。然後,對於資料列表中的每個元組,我們提取第二個元素作為鍵(item[1]),並提取第一個元素作為值(item[0])。然後,我們檢查該鍵是否已存在於 grouped_data 中。如果是,我們將該值附加到與該鍵關聯的現有值清單中。否則,我們建立一個新的鍵值對,其中鍵是第二個元素,值是包含第一個元素的新列表。最後,我們迭代 grouped_data 字典並列印每個鍵及其對應的值。

# Sample tuple list data = [('Apple', 'Fruit'), ('Banana', 'Fruit'), ('Carrot', 'Vegetable'), ('Potato', 'Vegetable')] # Grouping elements using a dictionary grouped_data = {} for item in data: key = item[1] value = item[0] if key in grouped_data: grouped_data[key].append(value) else: grouped_data[key] = [value] # Printing the grouped data for key, values in grouped_data.items(): print(key, ":", values)
登入後複製

輸出

Fruit : ['Apple', 'Banana'] Vegetable : ['Carrot', 'Potato']
登入後複製
登入後複製
登入後複製

方法2:使用itertools.groupby()

itertools.groupby() 函數提供了另一種根據特定標準對元素進行分組的有效方法。此方法要求輸入資料根據第二個元素進行排序。

文法

groups[key]
登入後複製

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

範例

在下面的範例中,我們從 itertools 模組匯入 groupby() 函數。 groupby() 函數要求根據分組鍵對輸入資料進行排序。因此,我們使用sorted()函數對資料列表進行排序,並提供一個lambda函數作為關鍵參數來指定基於第二個元素(x[1])的排序。然後,我們迭代 groupby() 函數的輸出,它傳回一個鍵和一個分組元素的迭代器。對於每個群組,我們提取金鑰並建立相應第一個元素 (item[0]) 的清單。

from itertools import groupby # Sample tuple list data = [('Apple', 'Fruit'), ('Banana', 'Fruit'), ('Carrot', 'Vegetable'), ('Potato', 'Vegetable')] # Sorting the data based on the second element sorted_data = sorted(data, key=lambda x: x[1]) # Grouping elements using itertools.groupby() grouped_data = {} for key, group in groupby(sorted_data, key=lambda x: x[1]): grouped_data[key] = [item[0] for item in group] # Printing the grouped data for key, values in grouped_data.items(): print(key, ":", values)
登入後複製

輸出

Fruit : ['Apple', 'Banana'] Vegetable : ['Carrot', 'Potato']
登入後複製
登入後複製
登入後複製

方法3:使用集合中的defaultdict

集合模組中的 defaultdict 類別提供了一種對元組清單中的元素進行分組的便捷方法。它會自動建立一個新清單作為每個鍵的預設值,從而簡化分組過程。

文法

groups[item].append(item)
登入後複製

這裡,語法使用集合模組中的 defaultdict() 函數初始化一個名為 groups 的 defaultdict 對象,其預設值為空列表。第二行程式碼使用鍵(項目)來存取群組字典中與該鍵關聯的列表,並將該項目附加到列表中。

範例

在下面的範例中,我們從集合模組導入defaultdict類別。初始化 grouped_data 字典時,我們使用 defaultdict(list) 將預設值設為空列表。然後,我們迭代資料列表,提取第二個元素作為鍵 (item[1]),提取第一個元素作為值 (item[0])。透過使用defaultdict,我們可以直接將值附加到與該鍵關聯的清單中。

from collections import defaultdict # Sample tuple list data = [('Apple', 'Fruit'), ('Banana', 'Fruit'), ('Carrot', 'Vegetable'), ('Potato', 'Vegetable')] # Grouping elements using defaultdict grouped_data = defaultdict(list) for item in data: grouped_data[item[1]].append(item[0]) # Printing the grouped data for key, values in grouped_data.items(): print(key, ":", values)
登入後複製

輸出

Fruit : ['Apple', 'Banana'] Vegetable : ['Carrot', 'Potato']
登入後複製
登入後複製
登入後複製

結論

在本文中,我們討論如何使用 Python 中的不同方法將元組清單中的第一個元素和第二個元素分組。透過使用字典,我們可以輕鬆地儲存和存取分組資料。 itertools.groupby() 函數提供了有效的解決方案,但需要對資料進行排序。此外,defaultdict 類別透過自動建立清單作為每個鍵的預設值來簡化分組過程。

以上是Python - 將元組清單中的第一個元素以第二個元素進行分組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!