按 2 个属性对 python 对象列表进行分组
group python list of objects by 2 attributes
我有一个对象列表,即
class A:
int b
int c
所以
a = A(b=1, c=2)
b = A(b=4, c=2)
...
我有这些的清单
[a, b, c, d, ..., n]
我如何将这个列表分类成组,在每个组中,对象在我选择的两个或多个属性之间具有相等性。所以如果我有
e = A(b=3, c=5)
h = A(b=3, c=5)
这些将被组合成一个列表或一些其他结构(也许设置?)
例如:
from itertools import groupby
class A(object):
def __init__(self, b, c):
self.b = b
self.c = c
items = [A(1, 2), A(1, 2), A(1, 2), A(2, 2), A(3, 4), A(3, 4), A(5, 6)]
groups = groupby(items, lambda a: (a.b, a.c))
for key, group in groups:
print "Key: %s, Number of items: %s" % (key, len(list(group)))
输出:
Key: (1, 2), Number of items: 3
Key: (2, 2), Number of items: 1
Key: (3, 4), Number of items: 2
Key: (5, 6), Number of items: 1
因此,在这种情况下,键函数 (lambda a: (a.b, a.c)
) 是将 A.b
和 A.c
组合成单个键(两个值的元组)的函数。
我有一个对象列表,即
class A:
int b
int c
所以
a = A(b=1, c=2)
b = A(b=4, c=2)
...
我有这些的清单
[a, b, c, d, ..., n]
我如何将这个列表分类成组,在每个组中,对象在我选择的两个或多个属性之间具有相等性。所以如果我有
e = A(b=3, c=5)
h = A(b=3, c=5)
这些将被组合成一个列表或一些其他结构(也许设置?)
例如:
from itertools import groupby
class A(object):
def __init__(self, b, c):
self.b = b
self.c = c
items = [A(1, 2), A(1, 2), A(1, 2), A(2, 2), A(3, 4), A(3, 4), A(5, 6)]
groups = groupby(items, lambda a: (a.b, a.c))
for key, group in groups:
print "Key: %s, Number of items: %s" % (key, len(list(group)))
输出:
Key: (1, 2), Number of items: 3
Key: (2, 2), Number of items: 1
Key: (3, 4), Number of items: 2
Key: (5, 6), Number of items: 1
因此,在这种情况下,键函数 (lambda a: (a.b, a.c)
) 是将 A.b
和 A.c
组合成单个键(两个值的元组)的函数。