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

比较两个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:54:05