在Python中,可以使用itertools.groupby
函数按多个属性进行无点分组。下面是一个示例代码:
from itertools import groupby
# 定义一个自定义的对象
class Person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def __repr__(self):
return f"Person(name='{self.name}', age={self.age}, gender='{self.gender}')"
# 创建一些Person对象
persons = [
Person('Alice', 25, 'Female'),
Person('Bob', 30, 'Male'),
Person('Charlie', 25, 'Male'),
Person('David', 30, 'Male'),
Person('Eve', 25, 'Female'),
]
# 按多个属性进行分组
sorted_persons = sorted(persons, key=lambda x: (x.age, x.gender))
groups = []
for key, group in groupby(sorted_persons, key=lambda x: (x.age, x.gender)):
groups.append(list(group))
# 打印分组结果
for group in groups:
print(group)
以上代码中,首先定义了一个Person
类,包含name
、age
和gender
属性。然后创建了一些Person
对象放入persons
列表中。
通过sorted
函数按照多个属性对persons
列表进行排序,使用key
参数指定排序规则,这里按照age
和gender
进行排序。
接下来,使用groupby
函数按照排序后的结果进行分组,同样使用key
参数指定分组规则。groupby
函数返回一个迭代器,其中的每个元素都是一个(key, group)
的元组,key
是分组的关键字,group
是一个迭代器,包含了分组的元素。
最后,将每个分组转换为列表,并将所有分组放入groups
列表中。
最后,遍历groups
列表,打印每个分组的内容。输出结果如下:
[Person(name='Alice', age=25, gender='Female'), Person(name='Eve', age=25, gender='Female')]
[Person(name='Charlie', age=25, gender='Male')]
[Person(name='Bob', age=30, gender='Male'), Person(name='David', age=30, gender='Male')]
上一篇:按多个属性进行排序
下一篇:按多个索引进行分组和最小值