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

Python:基于字典可用日期筛选可参加连续两天派对的人员

嘿,这个需求拆解开来其实很清晰,我来一步步帮你搞定!

核心思路

我们的目标是找出所有连续两天的日期组合,然后对每个组合筛选出两天都能参加的人员,最后可以根据参与人数选出最适配的日期。具体分三步:

  1. 统一处理日期格式,方便判断“连续两天”;
  2. 从所有人的可用日期中提取出所有有效的连续日期对;
  3. 对每个日期对,匹配出两天都有空的人员名单。
代码示例(Python)

假设你的人员字典结构如下(如果实际结构不同,只需微调字段名即可):

from datetime import datetime, timedelta

# 示例:以HS为索引的人员信息字典
people_dict = {
    "HS001": {"name": "Alice", "available_dates": ["2024-05-10", "2024-05-11", "2024-05-13"]},
    "HS002": {"name": "Bob", "available_dates": ["2024-05-10", "2024-05-11", "2024-05-12"]},
    "HS003": {"name": "Charlie", "available_dates": ["2024-05-11", "2024-05-12", "2024-05-14"]}
}

# 第一步:将字符串日期转为datetime对象,方便判断连续
for hs_id, info in people_dict.items():
    info['available_dates_dt'] = [datetime.strptime(date, "%Y-%m-%d") for date in info['available_dates']]

# 第二步:收集所有可能的连续日期对
all_dates = set()
for info in people_dict.values():
    all_dates.update(info['available_dates_dt'])
all_dates_sorted = sorted(all_dates)

date_pairs = []
for i in range(len(all_dates_sorted) - 1):
    current = all_dates_sorted[i]
    next_day = all_dates_sorted[i+1]
    # 判断是否是连续的一天
    if next_day - current == timedelta(days=1):
        date_pairs.append((current.strftime("%Y-%m-%d"), next_day.strftime("%Y-%m-%d")))

# 第三步:为每个日期对匹配可参加人员
party_options = {}
for date1, date2 in date_pairs:
    attendees = []
    for hs_id, info in people_dict.items():
        # 检查两天是否都在该人员的可用列表中
        if date1 in info['available_dates'] and date2 in info['available_dates']:
            attendees.append(info['name'])
    party_options[f"{date1} & {date2}"] = attendees

# 输出所有可选日期的参与情况
print("所有可选日期组合及参与人员:")
for dates, people in party_options.items():
    print(f"- {dates}: {', '.join(people) if people else '无人能参加'}")

# 找出参与人数最多的最优日期
if party_options:
    best_date, best_attendees = max(party_options.items(), key=lambda x: len(x[1]))
    print(f"\n最适配的日期是 {best_date},共有 {len(best_attendees)} 人参加:{', '.join(best_attendees)}")
else:
    print("\n没有找到任何连续两天都有人能参加的日期组合!")
关键逻辑解释
  • 日期格式转换:用datetime处理日期可以避免字符串比较的误差(比如跨月份的连续日期,字符串无法直接判断);
  • 生成连续日期对:先收集所有出现过的可用日期,去重排序后,遍历判断相邻日期是否相差1天,得到所有有效的派对日期组合;
  • 筛选参会人员:对每个日期组合,逐一检查人员是否两天都有空,收集符合条件的名单;
  • 最优日期选择:通过max函数按参会人数排序,直接选出最适配的日期。

如果你的人员字典结构和示例不同(比如可用日期的字段名不是available_dates),只需要修改代码中对应的字段引用即可~

内容的提问来源于stack exchange,提问作者William Merritt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:07:09