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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:10:30