Python groupby()切分迭代器

  • Post category:Python

接下来我将详细讲解Python中groupby()函数的使用方法。

什么是groupby()函数

groupby()函数是Python中内置的常用函数之一,它可以将迭代器中的元素按照指定的规则进行分组。groupby()的返回结果是一个由元组组成的迭代器,元组的第一个元素是分组的关键字,第二个元素是该关键字对应的所有元素组成的迭代器。

groupby()函数的形式

groupby()函数的可选参数有key和function,其中key参数指定元素进行分组时的关键字,如果不指定key参数,则默认使用元素本身进行分组;而function参数则用于对分组的元素进行自定义处理。

groupby(iterable, key=None)

groupby()函数的使用示例

下面我们将讲解两个示例,分别展示groupby()函数的基本用法和高级用法。

示例1:使用默认关键字进行分组

我们构造一个包含数字和字母的列表,并对其进行分组:

from itertools import groupby

my_list = ['a', 'b', 'c', 1, 2, 'd', 'e', 'f', 3, 4, 'g']
groups = []
uniquekeys = []
data = []

for k, g in groupby(my_list):
    groups.append(list(g))
    uniquekeys.append(k)

print('uniquekeys:',uniquekeys)
print('groups:',groups)

运行结果如下:

uniquekeys: ['a', 'b', 'c', 1, 2, 'd', 'e', 'f', 3, 4, 'g']
groups: [['a'], ['b'], ['c'], [1], [2], ['d'], ['e'], ['f'], [3], [4], ['g']]

这里我们传入的迭代器是一个包含数字和字母的列表,groupby()函数按照默认的关键字对该列表进行了分组,返回了一个包含每个元素的子列表的列表,并将该列表中的所有元素当作了分组的唯一关键字。

示例2:使用自定义关键字进行分组

我们构造一个包含多个人员信息的列表,并按照人员所在的城市进行分组:

from itertools import groupby

my_list = [
    {'name': 'Tom', 'city': 'Beijing'},
    {'name': 'Jack', 'city': 'Shanghai'},
    {'name': 'Lucy', 'city': 'Beijing'},
    {'name': 'Lily', 'city': 'Shanghai'},
    {'name': 'Mike', 'city': 'Guangzhou'},
    {'name': 'Alex', 'city': 'Beijing'},
    {'name': 'Frank', 'city': 'Guangzhou'}
]

my_list.sort(key=lambda x: x['city'])
groups = []
uniquekeys = []
data = []

for k, g in groupby(my_list, key=lambda x: x['city']):
    groups.append(list(g))
    uniquekeys.append(k)

print('uniquekeys:', uniquekeys)
print('groups:', groups)

运行结果如下:

uniquekeys: ['Beijing', 'Guangzhou', 'Shanghai']
groups: [
    [{'name': 'Tom', 'city': 'Beijing'}, {'name': 'Lucy', 'city': 'Beijing'}, {'name': 'Alex', 'city': 'Beijing'}],
    [{'name': 'Mike', 'city': 'Guangzhou'}, {'name': 'Frank', 'city': 'Guangzhou'}],
    [{'name': 'Jack', 'city': 'Shanghai'}, {'name': 'Lily', 'city': 'Shanghai'}]
]

这里我们传入的迭代器是一个包含多个人员信息的列表,我们使用了自定义的key函数lambda x: x[‘city’]对列表的元素进行了分组,并将分组的关键字设定为人员所在的城市,每个元素代表一个人员的信息。groupby()函数将该列表按照城市进行了分组,返回了一个包含每个城市的子列表的列表,并将该列表中的城市名称当作了分组的关键字。

总结

通过以上示例,我们对Python中groupby()函数的使用方法有了基本的了解。groupby()函数是一个非常方便且使用广泛的函数,在实际的开发中也非常常用,需要我们掌握和熟练使用。