接下来我将详细讲解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()函数是一个非常方便且使用广泛的函数,在实际的开发中也非常常用,需要我们掌握和熟练使用。