如何根据ID中的日期将JSON记录分组为不同Payload?
根据ID中的日期分类JSON记录
首先,你已经找对了提取日期的思路,接下来咱们可以用字典分组的方式,把相同日期的记录归类到一起,再转换成你需要的db_payload格式,操作起来很顺畅。
步骤1:按日期分组记录
我们可以用一个字典,以日期字符串(比如'2019-03-20')作为键,对应的值是该日期下的所有记录列表。代码示例如下:
import datetime # 假设你的原始db数据已经定义好 db = { "db_records": [ {"webhook": 'NA', "xx": {"foo"}, "yy": {"otherfoo"}, "id": "UID1234567@2019-03-20T08:20:54.634838"}, {"webhook": 'NA', "xx": {"bar"}, "yy": {"otherbar"}, "id": "UID9876543@2019-03-21T09:10:22.123456"}, {"webhook": 'NA', "xx": {"baz"}, "yy": {"otherbaz"}, "id": "UID1122334@2019-03-20T14:30:15.987654"} ] } # 初始化分组字典 date_groups = {} for record in db['db_records']: # 直接提取日期字符串,分组阶段用字符串比转datetime更高效 date_str = record['id'].split('@')[1].split('T')[0] # 如果日期不在分组字典里,先创建对应的空列表 if date_str not in date_groups: date_groups[date_str] = [] # 将当前记录添加到对应日期的列表中 date_groups[date_str].append(record)
步骤2:生成每个日期对应的db_payload
现在date_groups里已经按日期分好组了,我们可以把每个组转换成你需要的db_payload结构:
# 生成所有日期对应的payload payloads = {} for idx, (date_str, records) in enumerate(date_groups.items(), 1): payload_key = f"db_payload{idx}" payloads[payload_key] = {"db_records": records} # 示例:输出2019-03-20对应的payload print(payloads['db_payload1'])
运行后,payloads['db_payload1']就会是所有日期为2019-03-20的记录组成的结构,完全符合你想要的格式。
补充优化:按日期排序生成payload
如果需要按日期先后顺序生成payload(比如从早到晚),可以先对日期键排序再生成:
# 对日期字符串进行排序 sorted_dates = sorted(date_groups.keys()) payloads = {} for idx, date_str in enumerate(sorted_dates, 1): payload_key = f"db_payload{idx}" payloads[payload_key] = {"db_records": date_groups[date_str]}
如果后续需要对日期做时间计算,再把date_str转成datetime.date对象就好,分组阶段用字符串更省事儿。
内容的提问来源于stack exchange,提问作者jake wong
相关产品推荐
相关产品推荐

