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

如何从字典列表生成各Tub可用传感器数量统计列表?

问题:统计每个Tub的可用传感器数量

给定字典列表:

sensors = [{'Index': 0, 'Tub': 0, 'Enable': True},
           {'Index': 1, 'Tub': 0, 'Enable': False},
           {'Index': 2, 'Tub': 0, 'Enable': True},
           {'Index': 0, 'Tub': 1, 'Enable': True},
           {'Index': 1, 'Tub': 1, 'Enable': True},
           {'Index': 2, 'Tub': 1, 'Enable': True}
]

需要生成列表 AvailableSensorsPerTub = [2, 3],其中索引对应Tub编号,值为该Tub中Enable为True的传感器数量。

用户已完成的尝试:

  1. 创建Tub编号列表:
# Create a list of tubs
tubList = list(set(sensor['Tub'] for sensor in tubLevelSensors))

输出为 [0,1]

  1. 遍历字典列表输出可用传感器信息:
for tub in tubList:
    for idx in range(len(tubLevelSensors)):
        if tub == tubLevelSensors[idx]['Tub'] and tubLevelSensors[idx]['Enable'] == True:
            print(tubLevelSensors[idx]['Tub'], tubLevelSensors[idx]['Index'])
            print()

得到输出:

0 0

0 2

1 0

1 1

1 2

但无法进一步得到最终结果 [2,3]。


解决方案

方法1:基于现有逻辑改进

在遍历过程中维护计数器,统计每个Tub的可用传感器数,最后按Tub编号顺序整理成列表:

sensors = [{'Index': 0, 'Tub': 0, 'Enable': True},
           {'Index': 1, 'Tub': 0, 'Enable': False},
           {'Index': 2, 'Tub': 0, 'Enable': True},
           {'Index': 0, 'Tub': 1, 'Enable': True},
           {'Index': 1, 'Tub': 1, 'Enable': True},
           {'Index': 2, 'Tub': 1, 'Enable': True}
]

# 获取所有Tub编号并排序(避免set返回的无序性)
tub_list = sorted({sensor['Tub'] for sensor in sensors})
available_counts = []

for tub in tub_list:
    count = 0
    # 直接遍历传感器列表,无需通过索引访问
    for sensor in sensors:
        if sensor['Tub'] == tub and sensor['Enable']:
            count += 1
    available_counts.append(count)

print(available_counts)  # 输出: [2, 3]

方法2:用普通字典高效统计

先通过字典记录每个Tub的可用传感器数量,再按Tub编号排序提取值:

count_dict = {}
for sensor in sensors:
    tub_num = sensor['Tub']
    if sensor['Enable']:
        # 若字典中无该Tub则默认计数0,再加1
        count_dict[tub_num] = count_dict.get(tub_num, 0) + 1

# 按Tub编号排序后生成结果列表
available_counts = [count_dict[tub] for tub in sorted(count_dict.keys())]
print(available_counts)  # 输出: [2, 3]

方法3:使用collections.defaultdict简化统计

借助defaultdict自动处理默认值,减少代码量:

from collections import defaultdict

count_dict = defaultdict(int)
for sensor in sensors:
    if sensor['Enable']:
        count_dict[sensor['Tub']] += 1

available_counts = [count_dict[tub] for tub in sorted(count_dict.keys())]
print(available_counts)  # 输出: [2, 3]

方法4:一行列表推导式(适合Tub编号连续的场景)

如果已知Tub编号是从0开始的连续整数,可以直接按编号范围统计:

max_tub = max(sensor['Tub'] for sensor in sensors)
available_counts = [sum(1 for s in sensors if s['Tub'] == tub and s['Enable']) for tub in range(max_tub + 1)]
print(available_counts)  # 输出: [2, 3]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:32:45