Zip字典和列表匹配日期

问题描述 投票:1回答:1

我对在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
    }
  ]
}

谢谢你

python sql
1个回答
0
投票

一旦你有了开始和结束日期列表的输出,你可以在它上面迭代,并调用你的其他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
© www.soinside.com 2019 - 2024. All rights reserved.