Python 键值分组或分区数据

  • Post category:Python

Python 中实现键值分组或分区数据可以使用 itertools.groupby() 函数和 collections.defaultdict() 类。

使用 itertools.groupby()

itertools.groupby(iterable, key=None) 函数可以将一个可迭代对象按照指定的 key 函数进行分组,返回一个包含分组结果的迭代器。

下面是一个示例代码,将一个列表中的字符串按照字符串长度进行分组:

import itertools

data = ['apple', 'banana', 'pear', 'watermelon', 'melon', 'orange']

groups = itertools.groupby(data, key=len)
for key, group in groups:
    print(key, list(group))

输出结果如下:

5 ['apple', 'pear']
8 ['watermelon']
5 ['melon']
6 ['banana']
6 ['orange']

使用 collections.defaultdict()

collections.defaultdict(default_factory) 类可以创建一个字典,如果访问一个不存在的 key,会使用 default_factory 函数创建该 key 的初始值,而不是抛出 KeyError 异常。

下面是一个示例代码,使用 collections.defaultdict() 类统计一个字符串中每个字符出现的次数:

import collections

data = 'Hello, World!'
count = collections.defaultdict(int)
for char in data:
    count[char] += 1

print(dict(count))

输出结果如下:

{'H': 1, 'e': 1, 'l': 3, 'o': 2, ',': 1, ' ': 1, 'W': 1, 'r': 1, 'd': 1, '!': 1}

可以看到,使用 collections.defaultdict() 类可以方便地实现对字典的统计。