如何将这段统计星期数的列表实现代码转换为字典形式?
基于字典实现的星期几计数优化方案
没问题!我帮你把这段依赖大量elif的列表计数代码,改成更简洁易维护的字典驱动实现,而且保证输出结果和原代码完全一致。
原代码核心逻辑回顾
原代码通过一个长度为7的列表对应周一到周日的计数,用一连串elif判断每个星期几对应的索引,然后累加计数。这种方式虽然能工作,但代码冗余,新增或修改星期几的映射时很麻烦。
改进后的字典实现版本(方式一:用字典映射索引)
这种方式用字典预先定义星期几到列表索引的映射,替代冗长的elif链,代码更简洁:
def count_weekday(weekdays): # 定义星期几到列表索引的字典映射 weekday_index = { "Mon": 0, "Tue": 1, "Wed": 2, "Thu": 3, "Fri": 4, "Sat": 5, "Sun": 6 } weekdays_counter = [0] * 7 for weekday in weekdays: # 通过字典直接获取索引,避免大量elif判断 if weekday in weekday_index: weekdays_counter[weekday_index[weekday]] += 1 return weekdays_counter
另一种字典实现(方式二:先统计字典再生成结果列表)
如果你更倾向于完全用字典做统计,最后再转换成原格式的列表,也可以这样写:
def count_weekday(weekdays): # 初始化每个星期几的计数为0 count_dict = { "Mon": 0, "Tue": 0, "Wed": 0, "Thu": 0, "Fri": 0, "Sat": 0, "Sun": 0 } for weekday in weekdays: if weekday in count_dict: count_dict[weekday] += 1 # 按照Mon到Sun的顺序提取计数,生成和原代码一致的列表 return [count_dict["Mon"], count_dict["Tue"], count_dict["Wed"], count_dict["Thu"], count_dict["Fri"], count_dict["Sat"], count_dict["Sun"]]
为什么这样更好?
- 代码更简洁:去掉了7个重复的
elif判断,可读性和维护性大幅提升 - 扩展性更强:如果需要调整星期几的顺序或新增其他标识,只需要修改字典即可,不用修改循环逻辑
- 更符合Pythonic风格:利用字典的快速查找特性,避免冗余的条件判断
测试验证
比如输入["Mon", "Tue", "Mon", "Fri", "Sun", "Sun"],两种改进后的代码都会返回[2, 1, 0, 0, 1, 0, 2],和原代码的输出完全一致。
内容的提问来源于stack exchange,提问作者Megan
相关产品推荐
相关产品推荐

