Skip to main content
 首页 » 编程设计

python之按 2 个属性对 python 对象列表进行分组

2025年05月04日15虾米姐

我有一个对象列表,即

class A: 
    int b 
    int c 

所以

a = A(b=1, c=2) 
b = A(b=4, c=2) 
... 

我有这些的 list

[a, b, c, d, ..., n] 

我如何将这个列表分类成组,在每个组中,对象在我选择的两个或多个属性之间具有相等性。所以如果我有

e = A(b=3, c=5) 
h = A(b=3, c=5) 

这些将被组合成一个列表或一些其他结构(也许设置?)

请您参考如下方法:

使用itertools.groupby() .

例如:

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 组合成一个单键(两个值的元组)。