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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:36:07