Python如何使用holidays库高效查询指定日期对应的全球各国节假日
高效实现方案
你原来的写法重复冗余,且遍历全年节假日做匹配效率低,我们可以通过统一的国家映射表 + 直接判断日期是否为节假日的方式优化,同时还能规避你原有代码中tuple(ptr[1], "US")这类语法错误(tuple构造仅支持传入单个可迭代参数,原有写法除以色列之外的分支都会报错)。
指定查询国家版本
如果只需查询固定几个国家,可通过配置映射表实现,后续新增国家仅需修改配置即可,无需重复写逻辑:
from datetime import date import holidays # 配置需要查询的国家:键是holidays库的国家代码,值是展示用的地区名称 COUNTRY_MAP = { "ISR": "以色列", "US": "美国", "UK": "英国", "CHN": "中国" } target_date = date.today() holiday_list = [] for country_code, country_name in COUNTRY_MAP.items(): # 加载对应国家当年的节假日 country_holidays = holidays.country_holidays(country_code, years=target_date.year) # 直接判断目标日期是否是节假日,无需遍历全年所有节假日 if target_date in country_holidays: holiday_list.append((country_holidays.get(target_date), country_name)) print(holiday_list)
全球查询版本
如果需要查询所有holidays库收录的国家和地区,可以直接调用库内置的支持国家列表,不需要手动维护映射:
from datetime import date import holidays target_date = date.today() holiday_list = [] # 遍历所有库支持的国家 for country_code in holidays.list_supported_countries(): country_holidays = holidays.country_holidays(country_code, years=target_date.year) if target_date in country_holidays: # 此处直接用国家代码作为地区名,也可以自己维护映射转成中文/官方全称 holiday_list.append((country_holidays.get(target_date), country_code)) print(holiday_list)
优化点说明
- 代码复用性高:新增查询国家仅需要修改配置表,不需要重复写循环逻辑
- 查询效率更高:不需要遍历对应国家全年的所有节假日,直接通过哈希判断日期是否存在,匹配速度比原有写法快数倍
- 覆盖范围灵活:既支持自定义指定国家,也支持一键查询所有已收录的全球地区
内容的提问来源于stack exchange,提问作者AngelStrongX12
相关产品推荐
相关产品推荐

