Python itertools.groupby() Function



The Python itertools.groupby() function is used to group consecutive elements in an iterable that have the same key. It returns an iterator that produces key-value pairs, where the key is derived from a function, and the value is an iterator containing grouped elements.

This function is commonly used for categorizing data into groups based on a certain property.

Syntax

Following is the syntax of the Python itertools.groupby() function −

itertools.groupby(iterable, key=None)

Parameters

This function accepts the following parameters −

  • iterable: The iterable whose elements will be grouped.
  • key (optional): A function that determines the key for each group. If not provided, the elements themselves are used as keys.

Return Value

This function returns an iterator that yields pairs of a key and an iterator of grouped elements.

Example 1

Following is an example of the Python itertools.groupby() function. Here, we group consecutive identical numbers in a list −

Open Compiler
import itertools numbers = [1, 1, 2, 2, 2, 3, 4, 4, 5] for key, group in itertools.groupby(numbers): print(key, list(group))

Following is the output of the above code −

1 [1, 1]
2 [2, 2, 2]
3 [3]
4 [4, 4]
5 [5]

Example 2

Here, we group words using the itertools.groupby() function based on their first letter −

Open Compiler
import itertools def first_letter(word): return word[0] words = ["apple", "apricot", "banana", "blueberry", "cherry", "cranberry"] for key, group in itertools.groupby(words, key=first_letter): print(key, list(group))

Output of the above code is as follows −

a ['apple', 'apricot']
b ['banana', 'blueberry']
c ['cherry', 'cranberry']

Example 3

Now, we use itertools.groupby() function to group a list of dictionaries based on a shared attribute −

Open Compiler
import itertools data = [ {"category": "fruit", "name": "apple"}, {"category": "fruit", "name": "banana"}, {"category": "vegetable", "name": "carrot"}, {"category": "vegetable", "name": "broccoli"} ] def get_category(item): return item["category"] sorted_data = sorted(data, key=get_category) for key, group in itertools.groupby(sorted_data, key=get_category): print(key, list(group))

The result obtained is as shown below −

fruit [{'category': 'fruit', 'name': 'apple'}, {'category': 'fruit', 'name': 'banana'}]
vegetable [{'category': 'vegetable', 'name': 'carrot'}, {'category': 'vegetable', 'name': 'broccoli'}]

Example 4

We can also use the itertools.groupby() function to group numbers as even or odd −

Open Compiler
import itertools def is_even(n): return "Even" if n % 2 == 0 else "Odd" numbers = [1, 2, 2, 3, 4, 5, 6, 6, 7, 8] for key, group in itertools.groupby(numbers, key=is_even): print(key, list(group))

The result produced is as follows −

Odd [1]
Even [2, 2]
Odd [3]
Even [4]
Odd [5]
Even [6, 6]
Odd [7]
Even [8]
python_modules.htm
Advertisements