使用 Python 根據字串首字母分組列表


在 Python 中,我們可以使用多種方法根據字串的首字母對列表進行分組,例如使用字典、使用 itertools.groupby、使用 Defaultdict 等。這在各種場景中都很有用,例如組織姓名或對資料進行分類。在本文中,我們將探討使用 Python 根據字串的首字母對列表進行分組的不同方法。

方法 1:使用字典

在這種方法中,字典的鍵將表示首字母,相應的值將是包含以該字元開頭的所有字串的列表。

語法

list_name.append(element)

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

示例

在下面的示例中,函式 group_list_by_first_character 以字串列表作為輸入並返回一個字典。它遍歷輸入列表中的每個字串並提取首字母。如果首字母已存在於字典中作為鍵,則將字串附加到相應的值列表中。否則,將建立一個新的鍵值對,其中首字母作為鍵,字串作為值列表中的第一項。

def group_list_by_first_character(strings):
    grouped_dict = {}
    for string in strings:
        first_character = string[0]
        if first_character in grouped_dict:
            grouped_dict[first_character].append(string)
        else:
            grouped_dict[first_character] = [string]
    return grouped_dict

# Example usage
strings = ["apple", "banana", "cat", "dog", "elephant"]
grouped_dict = group_list_by_first_character(strings)
print(grouped_dict)

輸出

{'a': ['apple'], 'b': ['banana'], 'c': ['cat'], 'd': ['dog'], 'e': ['elephant']}

方法 2:使用 itertools.groupby

Python 的 itertools.groupby 是一個有用的函式,可用於根據特定條件對元素進行分組。要根據首字母對字串列表進行分組,我們可以使用 itertools.groupby 以及 lambda 函式。

語法

list_name.append(element)

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

itertools.groupby(iterable, key=None)

這裡,groupby() 方法以可迭代物件作為輸入,並帶有一個可選的鍵函式。它返回一個迭代器,該迭代器生成包含可迭代物件中連續鍵和組的元組。鍵函式用於確定分組標準。

示例

在下面的示例中,我們匯入 itertools 模組並使用 groupby 函式。在應用 groupby 之前,我們使用 sort() 方法對輸入列表進行排序。此步驟是必要的,因為 groupby 對具有相同鍵的連續元素進行操作。透過對列表進行排序,我們確保具有相同首字母的字串彼此相鄰。

lambda 函式 lambda x: x[0] 指定分組標準是每個字串的首字母。然後,groupby 函式返回一個迭代器,其中包含具有鍵和表示組的可迭代物件的元組。我們將每個組轉換為列表並將其附加到 grouped_list 中。

import itertools

def group_list_by_first_character(strings):
    strings.sort()  # Sorting the list is necessary for groupby to work correctly
    grouped_list = []
    for key, group in itertools.groupby(strings, lambda x: x[0]):
        grouped_list.append(list(group))
    return grouped_list

# Example usage
strings = ["apple", "banana", "cat", "dog", "elephant"]
grouped_list = group_list_by_first_character(strings)
print(grouped_list)

輸出

[['apple'], ['banana'], ['cat'], ['dog'], ['elephant']]

方法 3:使用 DefaultDict

另一種根據字串的首字母對列表進行分組的有用方法是利用 collections 模組中的 defaultdict 類。Defaultdict 是內建 dict 類的子類,它會自動使用預設值初始化缺失的鍵。

語法

groups[item].append(item)

這裡,語法使用 collections 模組中的 defaultdict() 函式初始化一個名為 groups 的 defaultdict 物件,其預設值為一個空列表。程式碼的第二行使用鍵 (item) 訪問 groups 字典中與此鍵關聯的列表,並將 item 附加到列表中。

示例

在下面的示例中,我們從 collections 模組匯入 defaultdict 類。我們建立一個 defaultdict 物件 grouped_dict,其預設值設定為一個空列表。當我們遍歷輸入列表中的每個字串時,我們使用首字母作為鍵並將字串附加到 grouped_dict 中相應的值列表中。

from collections import defaultdict

def group_list_by_first_character(strings):
    grouped_dict = defaultdict(list)
    for string in strings:
        grouped_dict[string[0]].append(string)
    return grouped_dict

# Example usage
strings = ["apple", "banana", "cat", "dog", "elephant"]
grouped_dict = group_list_by_first_character(strings)
print(grouped_dict)

輸出

defaultdict(<class 'list'>, {'a': ['apple'], 'b': ['banana'], 'c': ['cat'], 'd': ['dog'], 'e': ['elephant']})

結論

在本文中,我們討論瞭如何在 Python 中使用不同的方法根據字串的首字母對列表進行分組。我們使用了字典、itertools.groupby 和 defaultdict 來實現所需的分組。每種方法都有其自身的優勢,可能適合於您的應用程式的特定需求。

更新於: 2023年7月17日

499 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.