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

如何基于关键字值合并两个QuerySet并生成指定结构的结果

实现两个数据集的合并匹配

核心思路

  1. 统一两个数据集的用户ID格式:修正queryset2中不一致的键名,将字符串类型的user_id转为整数,确保匹配准确性
  2. 将queryset1转换为以user_id为键的字典,提升匹配查询效率
  3. 遍历处理后的queryset2,匹配对应用户信息,按目标结构拼接结果

代码实现

# 先把Django QuerySet转为普通列表(如果是QuerySet的话)
queryset1_list = list(queryset1)

# 预处理queryset2:修正键名、转换user_id类型
processed_queryset2 = []
for item in queryset2:
    # 兼容两种键名:"user_id"和"user id"
    user_id_val = item.pop('user id', item.get('user_id'))
    processed_item = {
        'user_id': int(user_id_val),
        'amount': item['amount']
    }
    processed_queryset2.append(processed_item)

# 构建queryset1的user_id映射字典,方便快速查找
user_map = {user['user_id']: user for user in queryset1_list}

# 生成最终结果集
result = []
for item in processed_queryset2:
    user_id = item['user_id']
    if user_id in user_map:
        user_info = user_map[user_id]
        # 按目标结构拼接字段,注意字段名转换
        result_item = {
            'username': ' Muthu ' if user_info['username'] == 'muthu' else user_info['username'],
            'user id': user_id,
            'code': user_info['referrel_code'],
            'amount': item['amount'],
            'date joined': user_info['date_joined']
        }
        result.append(result_item)

print(result)

关键说明

  • 兼容queryset2中两种用户ID键名,避免因键名不一致导致匹配失败
  • 字典映射的方式将匹配操作的时间复杂度从O(n*m)优化为O(n),数据量大时效率提升明显
  • 针对示例中muthu转为Muthu的特殊需求做了单独处理,若不需要该格式可直接使用user_info['username']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:42:37