如何快速统计Python字典列表中is_pass字段的True/False数量?
快速统计字典列表中is_pass字段的布尔值数量
方案1:用sum结合生成器表达式(最简洁)
利用Python中布尔值等价于整数(True=1,False=0)的特性,一行代码就能统计目标值数量:
my_list = [{'is_pass':True},{'is_pass':True},{'is_pass':False},{'is_pass':False},{'is_pass':True},{'is_pass':True}] total = len(my_list) pass_count = sum(d['is_pass'] for d in my_list) fail_count = total - pass_count # 也可以直接计算失败数:sum(not d['is_pass'] for d in my_list) print(total, pass_count, fail_count) # 输出:6 4 2
方案2:用collections.Counter(适合多维度统计)
你之前用Counter失败,是因为直接把整个字典列表传给了它——它默认统计的是列表里的字典元素出现次数,而非字典内的is_pass值。正确做法是先提取所有is_pass的取值,再传入Counter:
from collections import Counter my_list = [{'is_pass':True},{'is_pass':True},{'is_pass':False},{'is_pass':False},{'is_pass':True},{'is_pass':True}] cnt = Counter(d['is_pass'] for d in my_list) total = len(my_list) pass_count = cnt[True] fail_count = cnt[False] print(total, pass_count, fail_count) # 输出:6 4 2
为什么直接用count无效?
list.count(item)是统计列表中完全等于item的元素出现次数。你的列表元素是字典(比如{'is_pass':True}),和布尔值True不是同一对象,所以my_list.count(True)会返回0,无法得到预期结果。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

