python 如何按规则分配数据?

新手上路,请多包涵
规则变量: 

rule = [{
    'name': 'rule1',
    'users': '1,2,3,4,5,6,7',
    'weekday': '1,2,3,4,5'
},{
    'name': 'rule1',
    'users': '8',
    'weekday': '6,7'
}]
用户列表:
users = [{
    'id': 1,
    'name': '人员1'
},{
    'id': 2,
    'name': '人员2'
},{
    'id': 3,
    'name': '人员3'
},{
    'id': 4,
    'name': '人员4'
},{
    'id': 5,
    'name': '人员5'
},{
    'id': 6,
    'name': '人员6'
},{
    'id': 7,
    'name': '人员7'
},{
    'id': 8,
    'name': '人员8'
}]

怎么按 rule 中的规则把人员列表按月分配到每一天中?

结果:
{'date': '2022-07-01', 'week': '星期五', 'member': '人员1'}
{'date': '2022-07-02', 'week': '星期六', 'member': '人员8'}
{'date': '2022-07-03', 'week': '星期日', 'member': '人员8'}
{'date': '2022-07-04', 'week': '星期一', 'member': '人员2'}
{'date': '2022-07-05', 'week': '星期二', 'member': '人员3'}
{'date': '2022-07-06', 'week': '星期三', 'member': '人员4'}
{'date': '2022-07-07', 'week': '星期四', 'member': '人员5'}
{'date': '2022-07-08', 'week': '星期五', 'member': '人员6'}
{'date': '2022-07-09', 'week': '星期六', 'member': '人员8'}
{'date': '2022-07-10', 'week': '星期日', 'member': '人员8'}
{'date': '2022-07-11', 'week': '星期一', 'member': '人员7'}
......
{'date': '2022-07-31', 'week': '星期日', 'member': '人员8'}

并且在 rule 中增加其它规则的话可以按规则做出相应匹配,请各位大佬指点指点!!!!感谢!!!

阅读 614
1 个回答
# Running the provided code to see the output

from datetime import datetime, timedelta

# 规则变量
rules = [
    {
        'name': 'rule1',
        'users': '1,2,3,4,5,6,7',
        'weekday': '1,2,3,4,5'
    },
    {
        'name': 'rule2',
        'users': '8',
        'weekday': '6,7'
    }
]

# 用户列表
users = [
    {'id': 1, 'name': '人员1'},
    {'id': 2, 'name': '人员2'},
    {'id': 3, 'name': '人员3'},
    {'id': 4, 'name': '人员4'},
    {'id': 5, 'name': '人员5'},
    {'id': 6, 'name': '人员6'},
    {'id': 7, 'name': '人员7'},
    {'id': 8, 'name': '人员8'}
]

# 创建用户ID到名称的映射
user_map = {user['id']: user['name'] for user in users}

# 开始日期
start_date = datetime(2022, 7, 1)
# 结束日期
end_date = datetime(2022, 7, 31)

# 当前日期
current_date = start_date

# 结果列表
result = []

# 当前用户索引
user_index = 0

# 遍历日期范围
while current_date <= end_date:
    # 获取当前星期
    current_weekday = current_date.weekday() + 1

    # 遍历规则
    for rule in rules:
        # 检查当前星期是否在规则中
        if str(current_weekday) in rule['weekday']:
            # 获取用户列表
            rule_users = [int(user_id) for user_id in rule['users'].split(',')]
            # 获取当前用户
            current_user_id = rule_users[user_index % len(rule_users)]
            # 获取用户名称
            current_user_name = user_map[current_user_id]
            # 添加到结果
            result.append({
                'date': current_date.strftime('%Y-%m-%d'),
                'week': '星期' + '一二三四五六日'[current_weekday - 1],
                'member': current_user_name
            })
            # 更新用户索引
            user_index += 1

    # 更新当前日期
    current_date += timedelta(days=1)

# Printing the results
result

输出:

[{'date': '2022-07-01', 'week': '星期五', 'member': '人员1'},
 {'date': '2022-07-02', 'week': '星期六', 'member': '人员8'},
 {'date': '2022-07-03', 'week': '星期日', 'member': '人员8'},
 {'date': '2022-07-04', 'week': '星期一', 'member': '人员4'},
 {'date': '2022-07-05', 'week': '星期二', 'member': '人员5'},
 {'date': '2022-07-06', 'week': '星期三', 'member': '人员6'},
 {'date': '2022-07-07', 'week': '星期四', 'member': '人员7'},
 {'date': '2022-07-08', 'week': '星期五', 'member': '人员1'},
 {'date': '2022-07-09', 'week': '星期六', 'member': '人员8'},
 {'date': '2022-07-10', 'week': '星期日', 'member': '人员8'},
 {'date': '2022-07-11', 'week': '星期一', 'member': '人员4'},
 {'date': '2022-07-12', 'week': '星期二', 'member': '人员5'},
 {'date': '2022-07-13', 'week': '星期三', 'member': '人员6'},
 {'date': '2022-07-14', 'week': '星期四', 'member': '人员7'},
 {'date': '2022-07-15', 'week': '星期五', 'member': '人员1'},
 {'date': '2022-07-16', 'week': '星期六', 'member': '人员8'},
 {'date': '2022-07-17', 'week': '星期日', 'member': '人员8'},
 {'date': '2022-07-18', 'week': '星期一', 'member': '人员4'},
 {'date': '2022-07-19', 'week': '星期二', 'member': '人员5'},
 {'date': '2022-07-20', 'week': '星期三', 'member': '人员6'},
 {'date': '2022-07-21', 'week': '星期四', 'member': '人员7'},
 {'date': '2022-07-22', 'week': '星期五', 'member': '人员1'},
 {'date': '2022-07-23', 'week': '星期六', 'member': '人员8'},
 {'date': '2022-07-24', 'week': '星期日', 'member': '人员8'},
 {'date': '2022-07-25', 'week': '星期一', 'member': '人员4'},
 {'date': '2022-07-26', 'week': '星期二', 'member': '人员5'},
 {'date': '2022-07-27', 'week': '星期三', 'member': '人员6'},
 {'date': '2022-07-28', 'week': '星期四', 'member': '人员7'},
 {'date': '2022-07-29', 'week': '星期五', 'member': '人员1'},
 {'date': '2022-07-30', 'week': '星期六', 'member': '人员8'},
 {'date': '2022-07-31', 'week': '星期日', 'member': '人员8'}]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题