我对在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,它给你措施。
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