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()
类可以方便地实现对字典的统计。