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

如何按datetime值过滤JSON对象并按cekim时间后24小时分组交易

实现按cekim记录及后续24小时交易分组的方案

实现思路

  • 第一步:先把所有交易记录的date字段从字符串格式转为Python datetime对象,方便时间对比计算
  • 第二步:筛选出所有type为cekim的记录作为分组锚点
  • 第三步:针对每一个锚点记录,计算锚点时间往后24小时的截止时间
  • 第四步:遍历所有交易记录,筛选出时间大于等于锚点时间、小于等于截止时间的记录,组成对应分组
  • 可选优化:如果需要避免同一交易被重复分到多个重叠的cekim分组,可以额外加去重逻辑,把交易优先分配给时间最早的锚点分组即可

完整实现代码

from datetime import datetime, timedelta

# 原始数据集
myData = [{'id': 40255674078, 'amount': 100.0, 'date': '21-08-21 - 18:44:17', 'type': 'yatirim'},
          {'amount': 100.0, 'id': 40363908488, 'date': '23-08-21 - 00:34:59', 'type': 'cekim'},
          {'id': 40363733957, 'amount': 100.0, 'date': '23-08-21 - 00:35:26', 'type': 'yatirim'},
          {'id': 40363764873, 'amount': 50.0, 'date': '23-08-21 - 00:35:49', 'type': 'yatirim'},
          {'id': 40363786563, 'amount': 20.0, 'date': '23-08-21 - 00:36:06', 'type': 'yatirim'},
          {'amount': 100.0, 'id': 40372743199, 'date': '23-08-21 - 03:02:35', 'type': 'cekim'},
          {'id': 40378210996, 'amount': 30.0, 'date': '23-08-21 - 06:10:19', 'type': 'yatirim'},
          {'id': 40378346583, 'amount': 20.0, 'date': '23-08-21 - 06:15:59', 'type': 'yatirim'}]

# 1. 预处理所有记录,新增datetime格式的时间字段
time_format = "%d-%m-%y - %H:%M:%S"
for item in myData:
    item["dt"] = datetime.strptime(item["date"], time_format)

# 2. 筛选所有cekim锚点记录
cekim_list = [item for item in myData if item["type"] == "cekim"]

# 3. 生成每个cekim对应的分组
group_result = []
for cekim in cekim_list:
    start_time = cekim["dt"]
    end_time = start_time + timedelta(hours=24)
    # 筛选时间范围内的所有交易
    current_group = [item for item in myData if start_time <= item["dt"] <= end_time]
    group_result.append({
        "cekim_id": cekim["id"],
        "cekim_time": cekim["date"],
        "transactions": current_group
    })

# 输出测试结果
for group in group_result:
    print(f"对应cekim记录ID:{group['cekim_id']},时间:{group['cekim_time']}")
    print(f"组内交易数量:{len(group['transactions'])}")
    for trans in group['transactions']:
        print(f"  交易ID:{trans['id']},类型:{trans['type']},金额:{trans['amount']},时间:{trans['date']}")
    print("-"*50)

运行结果说明

用示例数据运行后会得到2个分组:

  • 第一个分组对应ID为40363908488的cekim记录,包含该记录及之后除了第一条21号交易外的所有7条交易
  • 第二个分组对应ID为40372743199的cekim记录,包含该记录及之后的3条交易

大数据量优化方案

如果总交易数非常多,可以优化查询效率:

  • 先把所有交易按dt字段升序排序
  • 对每个cekim锚点,用二分查找快速定位起始和结束位置,不用每次遍历全量数据,时间复杂度从O(n*m)降到O(n log n + m log n),n为总交易数,m为cekim记录数

内容的提问来源于stack exchange,提问作者Elfo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:21:03