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

如何遍历Python类对象列表并统计相同属性值的数量?

优化Python问卷提交数据中民族统计的实现方式

你当前的实现确实存在可优化空间——硬编码多个变量和分支判断的写法不仅冗余,后续新增民族选项时还需要修改多处代码。下面提供几种更简洁高效的实现方案:

方案一:使用普通字典统计

用字典存储各民族计数,无需提前定义大量变量,逻辑更灵活:

ethnicity_counts = {"White": 0, "Black": 0, "Asian": 0, "Mixed": 0, "Other": 0}
total_submissions = 0

for s in submissions:
    submissionList.insert(END, s.getInfo())
    total_submissions += 1
    if s.ethnicity in ethnicity_counts:
        ethnicity_counts[s.ethnicity] += 1

后续查看各民族人数时,直接通过ethnicity_counts["White"]这类方式获取即可;新增民族选项只需要修改初始字典的键,无需改动循环内的逻辑。

方案二:使用collections.Counter(推荐)

Python标准库的collections.Counter专门用于计数场景,代码会更简洁:

from collections import Counter

ethnicity_counts = Counter()
total_submissions = 0

for s in submissions:
    submissionList.insert(END, s.getInfo())
    total_submissions += 1
    ethnicity_counts[s.ethnicity] += 1

Counter会自动处理不存在的键,首次遇到时会默认初始化为0再累加。你还可以通过ethnicity_counts.most_common()直接获取按数量排序的统计结果,非常实用。

如果需要限定只统计指定民族(避免无效值干扰),可以提前初始化Counter的默认键:

ethnicity_counts = Counter({"White": 0, "Black": 0, "Asian": 0, "Mixed": 0, "Other": 0})

方案三:结合生成器表达式简化统计

如果不需要在循环中同时处理submissionList插入操作,还可以将插入和统计分离,逻辑更清晰:

from collections import Counter

# 先完成所有提交内容的插入
for s in submissions:
    submissionList.insert(END, s.getInfo())

total_submissions = len(submissions)
ethnicity_counts = Counter(s.ethnicity for s in submissions)

这些方案都比你原实现更简洁、可维护性更高,后续调整民族选项时,无需修改循环内的判断逻辑,仅需调整统计的初始配置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:50:22