Python如何统计对象列表中满足指定属性条件的元素个数?
Python 标准库没有直接提供你示例中带key参数的count函数,但可以通过标准库内置工具组合实现等价效果,常用实现方案有两种:
方案1:用sum+生成器表达式(最简便,单次统计优先用)
这种写法不需要额外导入依赖,内存效率高于你当前使用的列表推导写法(不会生成临时列表占用额外内存):
count_a = sum(1 for o in l if o.a == 1) assert count_a == 4
方案2:用collections.Counter+operator.attrgetter(适配你想要的attrgetter调用逻辑,适合多次统计不同属性值数量的场景)
如果需要批量统计不同属性值的出现次数,可以用标准库的Counter实现:
from operator import attrgetter from collections import Counter # 统计所有a属性值的出现次数 a_counter = Counter(map(attrgetter('a'), l)) # 取a=1的数量 print(a_counter[1]) # 输出4
自定义封装成你需要的调用形式
如果要完全实现你示例中的count调用方式,只需简单封装几行代码即可:
from operator import attrgetter def count(iterable, key, target): return sum(1 for item in iterable if key(item) == target) # 调用效果 print(count(l, key=attrgetter('a'), target=1)) # 输出4
内容的提问来源于stack exchange,提问作者user12181582
相关产品推荐
相关产品推荐

