如何根据xlsm文件名字符标识拆分列表并将同文件名对应数值分组
分组实现方案
你的原列表为文件名和对应数值交替排列的结构,直接按步长成对遍历即可完成分组,支持任意数量的自动分组,无需提前预设分组名。
方案1:使用defaultdict实现(代码更简洁)
无需提前判断键是否存在,推荐使用:
from collections import defaultdict # 替换为你的原始列表 raw_list = ['2021.04.xlsm', 115293, '2021.04.xlsm', 115442, '2021.04.xlsm', 186299, '2021.04.xlsm', 310394, '2021.04.xlsm', 328044, '2021.04.xlsm', 100230, '2021.04.xlsm', 101450, '2021.04.xlsm', 115737, '2021.04.xlsm', 135718, '2021.04.xlsm', 180556, '2021.04.xlsm', 186944, '2021.04.xlsm', 191136, '2021.04.xlsm', 1745816, '2021.04.xlsm', 7992583, '2021.04.xlsm', 9893903, '2021.04.xlsm', 15239924, '2021.04.xlsm', 45129498, '2021.05.xlsm', 176795, '2021.05.xlsm', 180580, '2021.05.xlsm', 1456450, '2021.05.xlsm', 1711780, '2021.05.xlsm', 10550128, '2021.05.xlsm', '2021.06.xlsm', 11038049, '2021.06.xlsm', 12457809, '2021.06.xlsm', 16732572, '2021.06.xlsm', 29316650, '2021.06.xlsm', 35978090, '2021.06.xlsm', 101752, '2021.06.xlsm', 117976, '2021.06.xlsm', 126402, '2021.06.xlsm', 815253, '2021.06.xlsm', 1197437, '2021.06.xlsm', 52081008, '2021.06.xlsm', 115388, '2021.06.xlsm', 115413, '2021.06.xlsm', 127115, '2021.06.xlsm', 157483, '2021.06.xlsm', 162088, '2021.06.xlsm'] # 初始化分组容器,默认值为空列表 group_result = defaultdict(list) # 步长为2遍历,每次取文件名和对应数值 for index in range(0, len(raw_list), 2): file_name = raw_list[index] # 边界判断,避免列表末尾只有文件名无对应数值时报错 if index + 1 < len(raw_list) and isinstance(raw_list[index+1], int): group_result[file_name].append(raw_list[index+1]) # 输出结果,可直接转成普通字典使用 print(dict(group_result))
方案2:使用普通字典实现(无需导入依赖)
如果不想导入额外模块,可以用原生字典实现,逻辑完全一致:
group_result = {} for index in range(0, len(raw_list), 2): file_name = raw_list[index] if index + 1 < len(raw_list) and isinstance(raw_list[index+1], int): if file_name not in group_result: group_result[file_name] = [] group_result[file_name].append(raw_list[index+1])
运行后输出的结构与你要求的格式完全匹配,自动聚合所有同文件名的数值。
内容的提问来源于stack exchange,提问作者kwentg
相关产品推荐
相关产品推荐

