在Python中,可以使用itertools.groupby
函数对列表进行分组,然后通过列表推导式或循环来获取分组后的另一个属性。
下面是一个使用itertools.groupby
函数的示例代码:
from itertools import groupby
# 定义一个对象类
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# 创建一些对象
people = [
Person('Alice', 25),
Person('Bob', 30),
Person('Charlie', 25),
Person('Dave', 30),
]
# 按年龄对对象列表进行分组
grouped_people = groupby(people, key=lambda x: x.age)
# 获取分组后的另一个属性
grouped_names = [list(g) for k, g in grouped_people]
# 打印结果
for group in grouped_names:
ages = ', '.join(str(person.age) for person in group)
names = ', '.join(person.name for person in group)
print(f"Ages: {ages} -> Names: {names}")
运行以上代码,将按照年龄分组并打印出分组后的姓名。
输出结果:
Ages: 25 -> Names: Alice, Charlie
Ages: 30 -> Names: Bob, Dave
以上代码中,我们使用groupby
函数将people
列表按照age
属性进行分组。然后,通过列表推导式将每个分组中的对象转换成列表,并将这些列表存储在grouped_names
中。最后,使用循环打印出每个分组的年龄和姓名。
请注意,groupby
函数要求输入的列表已经按照分组的属性进行排序。如果列表未排序,则需要先对列表进行排序,例如:people.sort(key=lambda x: x.age)
。