【问题标题】:Zip dictionary and list matching dateZip 字典和列表匹配日期
【发布时间】:2020-04-24 09:16:29
【问题描述】:

我对使用 Python 中的列表压缩不同大小的字典、匹配日期模式有一些疑问。

我有一个接收以下参数的 API:

code
start_date
end_date

我进行 SQL 查询以获取按年和月分组的度量值总和的结果,因此对于每个月和每年(如果有度量值),我的输出将是这样的:

{'start_date': datetime.date(2020, 1, 29), 'end_date': datetime.date(2020, 1, 29), 'measure': 619.2}

当我的 SQL 表中在请求日期的所有月份中都没有结果时,问题就出现了。

我有一个函数可以告诉我一个月的第一天和最后一天,接收请求的 start_date 和 end_date 作为参数。

例如,如果请求的 start_date 是“2019-02-01”,请求的 end_date 是“2020-03-10”,我的函数会将其作为输出

[['2019-02-01', '2019-02-28'], ['2019-03-01', '2019-03-31'], ['2019-04-01', '2019-04-30'], ['2019-05-01', '2019-05-31'], ['2019-06-01', '2019-06-30'], ['2019-07-01', '2019-07-31'], ['2019-08-01', '2019-08-31'], ['2019-09-01', '2019-09-30'], ['2019-10-01', '2019-10-31'], ['2019-11-01', '2019-11-30'], ['2019-12-01', '2019-12-31'], ['2020-01-01', '2020-01-31'], ['2020-02-01', '2020-02-29'], ['2020-03-01', '2020-03-10']]

例如,假设我的 SQL 表只获取从“2020-01-01”开始到“2020-03-10”结束的时间段的结果。我需要用我的天数列表压缩我的输出,这样我才能获得这样的新输出:

{
  "code": "xxx1",
  "measures": [
    {
      "start_date": "2020-01-01",
      "end_date": "2020-01-31",
      "measure": 619.2
    },
    {
      "start_date": "2020-02-01",
      "end_date": "2020-02-28",
      "measure": 701.5
    },
    {
      "start_date": "2020-03-01",
      "end_date": "2020-03-10",
      "measure": 238.6
    }
  ]
}

非常感谢,

【问题讨论】:

  • 如果您有一个函数为您的其他 API 提供 start_dateend_date 参数,我看不出这里有什么问题?
  • 这需要进一步澄清。当请求日期为 2020 年时,为什么您的日期列表中有 2019 日期?
  • 抱歉,我已经编辑了我的问题

标签: python sql


【解决方案1】:

一旦你得到开始和结束日期列表的输出,你可以迭代它并调用你的其他 API 来给你测量。

date_list = yourFunction_to_get_list() # which gives you above output like..[['2019-02-01', '2019-02-28'], ['2019-03-01', '2019-03-31']

data_dict = {
    "code": "xxx1"
    "measures": []
}
for start_date, end_date in date_list:
    try:
        output = YourAPI(code, start_date, end_date)
        data_dict['measures'].append({
            'start_date': start_date,
            'end_date': end_date,
            'measure': output['measure'],
        })
    except KeyError:
        pass
        #Handle the way you want to when there is no measure. You can simply pass too

【讨论】:

    猜你喜欢
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 2021-01-10
    • 2018-03-03
    • 2021-10-17
    • 1970-01-01
    • 2018-04-29
    相关资源
    最近更新 更多