Python groupby()切分迭代器

  • Post category:Python

Python的groupby()方法可以将一个可迭代对象按照指定条件进行分组,它能够接收一个关键字参数,用于指定分组的的key,返回一个元组(key, group)组成的迭代器,其中key是组别,group是包含相同key的元素的迭代器。

函数原型如下:

groupby(iterable[, key])

其中,iterable是需要分组的可迭代对象,而key则是指定分组的关键字参数,这个参数可以是一个函数或者一个lambda表达式,用于指定分组操作的规则。

下面来介绍一下groupby()的使用方法:

1. 通过对象属性分组

我们可以通过对象属性对一个列表进行分组,如下所示:

class Person:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

persons = [
    Person('张三', 21, '男'),
    Person('李四', 22, '女'),
    Person('王五', 23, '男'),
    Person('赵六', 24, '女'),
    Person('孙七', 25, '男'),
    Person('刘八', 26, '女')
]

from itertools import groupby

# 按照性别进行分组
persons_grouped_by_gender = groupby(persons, lambda x: x.gender)

for gender, group in persons_grouped_by_gender:
    print(gender)
    for person in group:
        print(person.name, person.age)

输出结果为:

男
张三 21
王五 23
孙七 25
女
李四 22
赵六 24
刘八 26

这里的group是包含相同key的元素的迭代器。

2. 通过字符串长度分组

在一个字符串列表中,我们可以按照字符串的长度进行分组:

str_list = ['a', 'bc', 'def', 'g', 'hij', 'klmno']

from itertools import groupby

# 按照字符串长度进行分组
str_grouped_by_len = groupby(str_list, lambda x: len(x))

for length, group in str_grouped_by_len:
    print(length)
    for string in group:
        print(string)

输出结果为:

1
a
1
g
2
bc
3
def
3
hij
5
klmno

这里的group是包含相同key的元素的迭代器。

以上就是groupby()的详细讲解及两个示例的介绍。