Python3如何按字典Key的子串分组并对对应Value求和
Python按字典键前缀分组求和实现方案
核心逻辑是遍历原字典,从键中提取季度前缀,再按前缀累加对应值即可,以下是几种常用实现方式:
方法1:原生字典实现(无需导入依赖)
# 注意不要用dict作为变量名,会覆盖Python内置类型 input_dict = {'S01E01': 27, 'S01E02': 27, 'S01E03': 32, 'S01E04': 36, 'S01E05': 35, 'S01E06': 31, 'S02E01': 33, 'S02E02': 21, 'S02E03': 20, 'S02E04': 29, 'S02E05': 33, 'S02E06': 42} output_dict = {} for k, v in input_dict.items(): # 提取季度前缀:按'E'分割取第一部分,适配S01/S10等不同位数的季度编号 season = k.split('E')[0] # 累加计数,key不存在时默认初始值为0 output_dict[season] = output_dict.get(season, 0) + v
运行后output_dict就是你需要的结果:{'S01': 188, 'S02': 178}
方法2:使用defaultdict简化写法
from collections import defaultdict input_dict = {'S01E01': 27, 'S01E02': 27, 'S01E03': 32, 'S01E04': 36, 'S01E05': 35, 'S01E06': 31, 'S02E01': 33, 'S02E02': 21, 'S02E03': 20, 'S02E04': 29, 'S02E05': 33, 'S02E06': 42} output_dict = defaultdict(int) for k, v in input_dict.items(): season = k.split('E')[0] output_dict[season] += v # 如需转为普通字典,执行下面这行即可 # output_dict = dict(output_dict)
注意事项
- 如果你的剧集编号规则有变化,前缀提取逻辑对应修改即可,比如固定取前3位的话把
k.split('E')[0]替换为k[:3] - 避免使用
dict作为自定义变量名,否则会导致后续调用内置字典类型时报错
内容的提问来源于stack exchange,提问作者Choupo
相关产品推荐
相关产品推荐

