在Python中,可以使用itertools.groupby
函数来按多个条件和操作进行分组。groupby
函数需要两个参数:一个可迭代对象和一个用于分组的关键字函数。关键字函数用于从可迭代对象的元素中提取分组的关键字。
下面是一个示例代码,演示如何使用groupby
函数按多个条件进行分组:
from itertools import groupby
# 定义一个Person类,包含name和age属性
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# 创建一个Person对象的列表
persons = [
Person("Alice", 20),
Person("Bob", 25),
Person("Alice", 30),
Person("Bob", 35),
Person("Alice", 40),
]
# 定义一个关键字函数,用于从Person对象中提取分组的关键字
def group_key(person):
return person.name, person.age // 10
# 使用groupby函数按name和age的十位数进行分组
groups = groupby(sorted(persons, key=group_key), key=group_key)
# 遍历分组结果
for key, group in groups:
print(key)
for person in group:
print(person.name, person.age)
print()
上述代码中,我们定义了一个Person
类,包含name
和age
属性。然后创建了一个persons
列表,包含了一些Person
对象。
接下来,我们定义了一个group_key
函数,用于从Person
对象中提取分组的关键字。在此示例中,我们通过name
属性和age
属性的十位数进行分组。
然后,我们使用groupby
函数对persons
列表进行排序,并按照关键字函数group_key
进行分组。最后,我们遍历分组结果,并打印出每个分组的关键字和对应的Person
对象。
运行上述代码,输出结果如下:
('Alice', 2)
Alice 20
Alice 30
Alice 40
('Bob', 2)
Bob 25
Bob 35
可以看到,persons
列表中的Person
对象按照name和age的十位数进行了分组。每个分组的关键字和对应的Person
对象都被打印出来。
上一篇:按多个条件过滤对象数组