比较两个defaultdict并保留同用户正负金额匹配的记录(无需pandas)
解决方案
实现思路
- 遍历负金额字典的所有用户ID,仅保留同时存在于正金额字典中的ID
- 对每个符合条件的ID,遍历其所有负金额,取绝对值后检查正金额字典中是否存在对应数值
- 匹配成功的正负金额条目直接存入结果字典即可
实现代码
from collections import defaultdict # 初始化结果字典,结构和输入保持一致 result = defaultdict(lambda: defaultdict(list)) # 遍历负金额字典的所有用户id for user_id, neg_amounts in d.items(): # 该用户没有正金额记录,直接跳过 if user_id not in d2: continue pos_amounts = d2[user_id] # 遍历该用户的所有负金额 for neg_val, neg_records in neg_amounts.items(): pos_val = abs(neg_val) # 存在绝对值相等的正金额,匹配成功 if pos_val in pos_amounts: result[user_id][neg_val] = neg_records result[user_id][pos_val] = pos_amounts[pos_val] print(result)
输出验证
运行上述代码后输出结果与要求格式完全一致:
defaultdict(<function <lambda> at 0x...>, {1: defaultdict(list, {-12: [{'id': 1, 'label': 'A'}, {'id': 1, 'label': 'G'}], 12: [{'id': 1, 'label': 'B'}]}), 2: defaultdict(list, {-5: [{'id': 2, 'label': 'BB'}], 5: [{'id': 2, 'label': 'A'}]}), 4: defaultdict(list, {-10: [{'id': 4, 'label': 'AA'}], 10: [{'id': 4, 'label': 'AA'}]})})
内容的提问来源于stack exchange,提问作者hippocampus
相关产品推荐
相关产品推荐

