如何用Python从JSON调度数据提取各用户排班日期列表?
提取排班JSON中的日期名称为嵌套列表
问题描述
我有一份包含排班信息的JSON数据集:
{ "admin-1": { "username": "user0", "current_amount_of_patients": 0, "on_break": false, "scheduling_type": 2, "schedule": { "Monday": ["17:00:00"], "Tuesday": ["17:00:00", "18:00:00"], "Wednesday": ["10:00:00", "11:00:00", "12:00:00", "13:00:00"] }, "com_type": 1 }, "admin-2": { "username": "user1", "on_break": false, "scheduling_type": 1, "timezone": "America/Los_Angeles", "schedule": { "Tuesday": ["17:00:00", "18:00:00"], "Wednesday": ["10:00:00", "11:00:00", "12:00:00", "13:00:00"], "Sunday": ["09:00:00", "10:00:00", "11:00:00", "12:00:00"] }, "com_type": 2 } }
我需要提取每个用户的排班日期名称,整理成如下嵌套列表:
days = [['Monday', 'Tuesday', 'Wednesday'], ['Tuesday', 'Wednesday', 'Sunday']]
我尝试了这段代码,但没得到预期结果:
days = [user["schedule"].keys() for user in data.values()]
考虑到后续可能新增用户,想用循环方式处理,该怎么实现?
解决方案
你之前的代码问题在于,dict.keys()返回的是dict_keys视图对象,不是标准的列表类型,所以需要把它转换成列表。下面提供两种可行的实现方式:
方式1:改进的列表推导式
直接在推导式里把keys()转成列表,简洁高效:
days = [list(user["schedule"].keys()) for user in data.values()]
方式2:显式循环(适合后续扩展)
如果需要后续添加更多逻辑(比如过滤无效日期、排序等),显式循环更易维护:
days = [] # 遍历所有用户的排班数据 for user_info in data.values(): # 提取当前用户的排班日期,转成列表后加入总列表 user_schedule_days = list(user_info["schedule"].keys()) days.append(user_schedule_days)
补充说明
Python 3.7及以上版本的字典会保留键的插入顺序,所以提取的日期顺序会和JSON里的一致。如果是更早的Python版本,需要额外处理排序,但现在大部分环境都已经是3.7+了,无需担心。
内容的提问来源于stack exchange,提问作者Eliahs Johansson
相关产品推荐
相关产品推荐

