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

如何以更Pythonic的方式编写Python2.7的storeType计数字典代码?

更Pythonic的代码改写方案

嘿,我来帮你优化这段统计代码!原代码的核心功能是统计不同storeType的出现次数并生成对应字典,但存在重复代码多、变量冗余的问题,咱们可以用更简洁、符合Python风格的方式实现:

问题分析

原代码的几个小问题:

  • 手动初始化三个独立计数变量,后续新增类型时要改多处
  • 多个elif分支重复逻辑,不够灵活
  • 最后构建字典时还写错了变量名(应该是typeA而非dataStore这类)

方案一:用普通字典统一计数(最直观)

直接用字典来管理所有类型的计数,避免冗余变量和重复判断:

# 初始化要统计的类型及初始计数
count_dict = {'dataStore': 0, 'coverageStore': 0, 'remoteStore': 0}

for item in counts:
    store_type = item['storeType']
    # 只统计我们关心的类型,避免无关类型干扰
    if store_type in count_dict:
        count_dict[store_type] += 1

这样一来,所有计数逻辑都集中在字典里,后续新增统计类型只需修改初始字典即可,不用加新的elif。

方案二:用collections.Counter(更简洁)

如果你的Python环境允许引入标准库,Counter是专门做计数的工具,代码会更短:

from collections import Counter

# 先提取所有storeType的值
all_store_types = [item['storeType'] for item in counts]
# 自动统计所有类型的出现次数
counter = Counter(all_store_types)

# 只保留我们需要的三种类型,没有的话默认0
count_dict = {
    'dataStore': counter.get('dataStore', 0),
    'coverageStore': counter.get('coverageStore', 0),
    'remoteStore': counter.get('remoteStore', 0)
}

这种方式尤其适合需要统计多种类型的场景,Counter会帮你处理所有计数逻辑。

方案三:用字典推导式+生成器(一行式风格)

如果追求简洁的一行式写法,也可以这样:

count_dict = {
    store_type: sum(1 for item in counts if item['storeType'] == store_type)
    for store_type in ['dataStore', 'coverageStore', 'remoteStore']
}

不过这种方式会遍历counts三次(每个类型一次),如果counts数据量很大,性能会比前两种差一些,适合小数据量场景。

这些写法都比原代码更符合Python的"优雅、简洁"原则,也更容易维护~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:33:31