You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何按用户统计嵌套列表中True/False值的出现次数

用户布尔值统计实现方案

实现逻辑

  • 遍历原始用户记录列表,忽略业务不需要的时间戳字段
  • 以用户名为唯一维度做聚合,分别累计每个用户名下True、False的出现次数
  • 聚合完成后将字典格式的统计结果,转换为要求的「用户名、True计数值、False计数值」嵌套列表结构

可运行代码

版本1:使用defaultdict(写法更简洁)

from collections import defaultdict

my_list = [
    ['user1', True, '2022-05-31 05:35:48'],
    ['user2', False, '2022-04-26 00:01:12'],
    ['user3', True, '2022-03-09 14:14:12'],
    ['user3', False, '2022-02-28 09:19:48'],
    ['user5', False, '2022-02-07 18:41:48']
]

# 初始化统计字典,每个新用户默认True、False计数均为0
count_map = defaultdict(lambda: [0, 0])
for username, flag, _ in my_list:
    if flag:
        count_map[username][0] += 1
    else:
        count_map[username][1] += 1

final_list = [[uname, true_num, false_num] for uname, (true_num, false_num) in count_map.items()]

运行后final_list的输出和预期完全一致:

[['user1', 1, 0], ['user2', 0, 1], ['user3', 1, 1], ['user5', 0, 1]]

版本2:无依赖纯原生实现

如果不想引入collections模块,用普通Python字典也可以实现完全相同的效果:

my_list = [
    ['user1', True, '2022-05-31 05:35:48'],
    ['user2', False, '2022-04-26 00:01:12'],
    ['user3', True, '2022-03-09 14:14:12'],
    ['user3', False, '2022-02-28 09:19:48'],
    ['user5', False, '2022-02-07 18:41:48']
]

count_map = {}
for username, flag, _ in my_list:
    # 首次遇到的用户先初始化计数
    if username not in count_map:
        count_map[username] = [0, 0]
    count_map[username][0] += 1 if flag else 0
    count_map[username][1] += 0 if flag else 1

final_list = [[uname, t_cnt, f_cnt] for uname, (t_cnt, f_cnt) in count_map.items()]

内容的提问来源于stack exchange,提问作者clovestamp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:03:24