Python - 字典中分組相似鍵


在 Python 中,可以使用多種方法對字典中的相似鍵進行分組,例如使用 defaultdict、使用列表字典、使用 itertools 模組以及 groupby 函式。在資料分析過程中,我們有時可能需要根據某些條件將字典中相似鍵組合在一起。在本文中,我們將探討在字典中分組相似鍵的各種方法。

方法 1:使用 defaultdict

Python 的 collections 模組中的 defaultdict 類提供了一種方便的方法來對相似鍵進行分組。當訪問新鍵時,它會自動初始化一個預設值。

語法

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

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

示例

在下面的示例中,我們建立了一個名為 grouped_dict 的 defaultdict 物件,其預設值為列表。我們遍歷每個鍵值對,並將鍵附加到 grouped_dict 中相應的列表。最後,我們使用 dict() 函式將 defaultdict 轉換為常規字典。

from collections import defaultdict

def group_keys_defaultdict(keys):
    grouped_dict = defaultdict(list)
    for key in keys:
        grouped_dict[key[0]].append(key)
    return dict(grouped_dict)

keys = [('A', 1), ('B', 2), ('A', 3), ('C', 4), ('B', 5)]
grouped_dict = group_keys_defaultdict(keys)
print(grouped_dict)

輸出

{'A': [('A', 1), ('A', 3)], 'B': [('B', 2), ('B', 5)], 'C': [('C', 4)]}

方法 2:使用列表字典

我們可以手動建立一個空字典,並遍歷鍵以透過為每個鍵建立列表來對它們進行分組。

語法

list_name.append(element)

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

示例

在下面的示例中,我們初始化一個名為 grouped_dict 的空字典。對於每個鍵值對,我們檢查該鍵是否已存在於字典中。如果不存在,則為該鍵建立一個空列表作為值。然後,我們將當前鍵附加到列表中。這樣,我們就將相似的鍵組合在一起。

def group_keys_dict_of_lists(keys):
    grouped_dict = {}
    for key in keys:
        if key[0] not in grouped_dict:
            grouped_dict[key[0]] = []
        grouped_dict[key[0]].append(key)
    return grouped_dict

keys = [('A', 1), ('B', 2), ('A', 3), ('C', 4), ('B', 5)]
grouped_dict = group_keys_dict_of_lists(keys)
print(grouped_dict)

輸出

{'A': [('A', 1), ('A', 3)], 'B': [('B', 2), ('B', 5)], 'C': [('C', 4)]}

方法 3:使用 itertools 模組中的 GroupBy 函式

我們可以使用 itertools 模組中的 groupby() 函式對相似鍵進行分組。它根據鍵函式對連續元素進行分組。

語法

list_name.append(element)

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

itertools.groupby(iterable, key=None)

這裡,iterable 可以是任何元素組或集合,key 是一個可選引數,用於確定將應用哪個分組標準。如果未傳遞 key,則其預設值為 None。

示例

在下面的示例中,我們首先使用 lambda 函式作為鍵函式,根據每個元組的第一個元素對鍵進行排序。然後,我們使用 groupby() 遍歷排序後的鍵。對於每個組,鍵和組本身分別儲存在單獨的變數中。我們將該組轉換為列表,並將其與相應的鍵一起儲存在 grouped_dict 中。

from itertools import groupby

def group_keys_itertools(keys):
    grouped_dict = {}
    keys.sort(key=lambda x: x[0])
    for key, group in groupby(keys, lambda x: x[0]):
        grouped_dict[key] = list(group)
    return grouped_dict

keys = [('A', 1), ('B', 2), ('A', 3), ('C', 4), ('B', 5)]
grouped_dict = group_keys_itertools(keys)
print(grouped_dict)

輸出

{'A': [('A', 1), ('A', 3)], 'B': [('B', 2), ('B', 5)], 'C': [('C', 4)]}

結論

在本文中,我們討論瞭如何在 Python 中使用不同的方法對字典中的相似鍵進行分組。我們實現了三種方法:使用 defaultdict、建立列表字典以及利用 itertools 模組中的 groupby() 函式。每種方法都提供了一種獨特的方法來實現所需的結果。透過有效地使用這些方法,您可以有效地對相似鍵進行分組,並以更結構化的方式組織您的資料。

更新於: 2023-07-19

2K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告