我正在尝试找出是否有一种简单的方法可以通过变量将几个对象分组吗?
我尝试遍历对象,创建单独的集,然后再次创建新对象,但是我觉得我的方法太复杂了,有什么通用的简单方法吗?
SELECT DATEDIFF(MONTH, '20151025', '20151227');
我希望它最终可以像 grouped_dogs 一样被年龄限制。
答案 0 :(得分:5)
您可以使用key
变量对狗进行排序,然后使用itertools模块中的groupby函数:
from itertools import groupby
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return (self.name, self.age)
dogs = [Dog('Buddy', 3), Dog('Max', 3), Dog('Charlie', 5),
Dog('Cooper', 1), Dog('Jack', 3),Dog('Rocky', 4), Dog('Bear', 1),
Dog('Duke', 3), Dog('Ace', 5)]
sorted_dogs = sorted(dogs, key=lambda x: x.age)
print([(d.name, d.age) for d in sorted(dogs, key=lambda x: x.age)])
for u, v in groupby(sorted_dogs, key=lambda x: x.age):
print(u, [(d.name, d.age) for d in v])
[('Cooper', 1), ('Bear', 1), ('Buddy', 3), ('Max', 3), ('Jack', 3), ('Duke', 3), ('Rocky', 4), ('Charlie', 5), ('Ace', 5)]
1 [('Cooper', 1), ('Bear', 1)]
3 [('Buddy', 3), ('Max', 3), ('Jack', 3), ('Duke', 3)]
4 [('Rocky', 4)]
5 [('Charlie', 5), ('Ace', 5)]
答案 1 :(得分:2)
您可以使用groupby
进行操作:
import itertools as it
groups = it.groupby(dogs, key=lambda x: x.age)
grouped_dogs = []
for _, items in groups:
grouped_dogs.append([(x.name, x.age) for x in items])