Group list by first character of string using Python

In Python, we can group lists by the first character of a string using various methods like dictionaries, itertools.groupby, and defaultdict. This can be useful for organizing names, categorizing data, or creating alphabetical indexes. In this article, we will explore different approaches to group lists by the first character of a string using Python.

Using a Dictionary

In this method, the keys of the dictionary represent the first characters, and the corresponding values are lists containing all strings starting with that character.

Example

The function iterates through each string, extracts the first character, and groups strings accordingly ?

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

# Example usage
words = ["apple", "apricot", "banana", "cat", "car", "dog", "elephant"]
result = group_by_first_character(words)
print(result)
{'a': ['apple', 'apricot'], 'b': ['banana'], 'c': ['cat', 'car'], 'd': ['dog'], 'e': ['elephant']}

Using itertools.groupby

The itertools.groupby function groups consecutive elements based on a key function. We need to sort the list first since groupby only groups consecutive elements.

Example

We sort the list first and then use a lambda function to specify the grouping criterion ?

import itertools

def group_by_first_character(strings):
    strings.sort()  # Sort first for groupby to work correctly
    grouped_dict = {}
    for key, group in itertools.groupby(strings, lambda x: x[0]):
        grouped_dict[key] = list(group)
    return grouped_dict

# Example usage
words = ["apple", "apricot", "banana", "cat", "car", "dog", "elephant"]
result = group_by_first_character(words)
print(result)
{'a': ['apple', 'apricot'], 'b': ['banana'], 'c': ['car', 'cat'], 'd': ['dog'], 'e': ['elephant']}

Using defaultdict

The defaultdict from the collections module automatically initializes missing keys with a default value, making the code cleaner and more efficient.

Example

With defaultdict, we don't need to check if a key exists before appending ?

from collections import defaultdict

def group_by_first_character(strings):
    grouped_dict = defaultdict(list)
    for string in strings:
        grouped_dict[string[0]].append(string)
    return dict(grouped_dict)  # Convert to regular dict for cleaner output

# Example usage
words = ["apple", "apricot", "banana", "cat", "car", "dog", "elephant"]
result = group_by_first_character(words)
print(result)
{'a': ['apple', 'apricot'], 'b': ['banana'], 'c': ['cat', 'car'], 'd': ['dog'], 'e': ['elephant']}

Comparison

Method Code Complexity Performance Best For
Dictionary Medium Good Learning/basic usage
itertools.groupby Medium Good (requires sorting) When data is already sorted
defaultdict Simple Best Clean, efficient code

Conclusion

Use defaultdict for the cleanest and most efficient solution. The dictionary method is good for learning, while itertools.groupby works well with pre-sorted data. All three methods effectively group strings by their first character.

Updated on: 2026-03-27T08:13:41+05:30

869 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements