如何通过Python字典检测JSON文件中的重复交易记录
JSON交易记录重复值检测实现方案
现有思路评估
- 你当前按交易日期先做分组的思路是可行的,重复交易基本都发生在同一自然日,提前分桶可以大幅减少后续比对的计算量,整体方向正确
- 现有代码存在几个可修正的问题:
- 冗余导入了未使用的
_task_print_stack,可以直接删除 - 文件读取没有使用上下文管理器,直接
open如果脚本中途报错会导致文件句柄无法正常释放 - 仅完成了日期分组逻辑,没有实现同日期下的重复判定
- 遍历分组时加了
break,只会输出第一个日期的交易数据,无法遍历全量记录
- 冗余导入了未使用的
重复判定规则
判定潜在重复交易的核心逻辑:同一日期下,交易金额amount、交易原始描述original_description完全一致的记录,判定为重复。
注意:transaction_id是每条交易的全局唯一标识,重复交易的ID一定不相同,因此该字段仅作为结果输出项,不参与重复判定逻辑。
可直接运行的优化后代码
import json from collections import defaultdict # 读取解析JSON文件,上下文管理器自动处理文件关闭 with open("42525022_formatted-1.json", "r", encoding="utf-8") as f: parsed_data = json.load(f) # 提取交易列表 transactions = parsed_data["report"]["items"][0]["accounts"][0]["transactions"] # 按日期对交易做分桶 txn_by_date = defaultdict(list) for txn in transactions: txn_by_date[txn["date"]].append(txn) duplicate_result = [] # 逐日期排查重复交易 for date, same_date_txns in txn_by_date.items(): # 以(金额, 原始描述)为key对同日期交易分组 group_key_map = defaultdict(list) for txn in same_date_txns: check_key = (txn["amount"], txn["original_description"]) group_key_map[check_key].append(txn) # 筛选组内记录数≥2的,即为重复交易组 for txn_group in group_key_map.values(): if len(txn_group) >= 2: for dup_txn in txn_group: duplicate_result.append({ "date": dup_txn["date"], "amount": dup_txn["amount"], "description": dup_txn["original_description"], "transactionID": dup_txn["transaction_id"] }) # 打印所有重复记录 for item in duplicate_result: print(item)
后续优化方向
- 匹配容错优化:实际交易场景中,同一笔交易的原始描述可能带随机订单号、时间戳后缀,可以先对描述做预处理(转小写、去除特殊字符、截断固定长度无意义后缀)后再做比对,降低漏判率
- 性能优化:如果交易数据量较大(10万条以上),可以直接用
(日期, 金额, 预处理后的描述)作为全局key做一次分组,不需要两层循环,代码更简洁、运行速度更快 - 结果易用性优化:可以给同一组重复交易标记相同的重复组ID,将结果导出为CSV/JSON文件,方便后续人工核验
- 鲁棒性优化:读取文件、解析字段时增加异常捕获,避免文件格式损坏、字段缺失导致脚本直接崩溃
内容的提问来源于stack exchange,提问作者GeForce
相关产品推荐
相关产品推荐

