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

Python中统计各季度数据数量及拆分对应子列表方法

嘿,作为Python新手能想到用Counter统计季度数量,已经迈出很棒的一步啦!接下来咱们就一步步搞定「按指定季度集合拆分数据为对应子列表」的需求~

首先先明确一下假设的原始数据结构(如果你的数据结构不一样,后面有适配技巧):我假设你有一个列表,每个元素是数据项+季度标识的元组,比如:

data = [("item_A", "1Q2015"), ("item_B", "2Q2015"), ("item_C", "1Q2015"),
        ("item_D", "3Q2016"), ("item_E", "2Q2017"), ("item_F", "1Q2017")]

同时你已经定义好要拆分的目标季度集合:

target_quarters = ["1Q2015", "2Q2015", "3Q2015", "4Q2015",
                   "1Q2016", "2Q2016", "3Q2016", "4Q2016",
                   "1Q2017", "2Q2017"]

方法一:用defaultdict高效分组(推荐)

这种方法只需要遍历一次原始数据就能完成分组,效率很高,而且逻辑清晰:

from collections import defaultdict

# 初始化一个字典,每个键对应一个空列表
quarter_groups = defaultdict(list)

# 遍历每一组数据项+季度
for item, qtr in data:
    # 只处理目标季度集合里的季度
    if qtr in target_quarters:
        quarter_groups[qtr].append(item)

# 如果需要按目标季度的顺序输出结果(避免字典顺序不确定的问题)
for qtr in target_quarters:
    print(f"{qtr}对应的子列表:{quarter_groups.get(qtr, [])}")

解释一下:defaultdict会自动为不存在的键创建空列表,不用手动判断“这个季度有没有在字典里”,直接append就行;最后按target_quarters的顺序遍历,能保证输出顺序和你指定的季度集合一致。

方法二:用推导式快速生成

如果你的数据量不大,或者想要更简洁的代码,可以用列表推导式或字典推导式:

# 单个季度的子列表生成
q1_2015_items = [item for item, qtr in data if qtr == "1Q2015"]

# 批量生成所有目标季度的子列表字典
quarter_groups = {qtr: [item for item, qtr_data in data if qtr_data == qtr] 
                  for qtr in target_quarters}

这种写法很紧凑,但要注意:字典推导式会遍历len(target_quarters)次原始数据,如果数据量很大,效率会比方法一低一些。

适配不同数据结构的小技巧

如果你的原始数据是分开的两个列表(比如一个items列表存数据项,一个quarter列表存对应季度),可以用zip()把它们配对后再处理:

items = ["item_A", "item_B", "item_C", "item_D", "item_E", "item_F"]
quarters = ["1Q2015", "2Q2015", "1Q2015", "3Q2016", "2Q2017", "1Q2017"]

quarter_groups = defaultdict(list)
for item, qtr in zip(items, quarters):
    if qtr in target_quarters:
        quarter_groups[qtr].append(item)

这样就能轻松把数据按你指定的季度拆分成对应的子列表啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:32:27