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

Python遍历循环时校验同ID组内sku_id关联数据的实现方法

实现思路与代码示例

核心步骤

  • 先按id对原始数据分组,注意用itertools.groupby前必须先按id排序——它只对连续相同键的元素分组
  • 把每个分组拆成两类条目:sku_id=104的条目,以及其他sku的条目
  • 将其他sku的quantity值存入集合,方便快速查找匹配值
  • 逐个检查每个sku_id=104的条目:
    1. 计算其quantity的一半值
    2. 检查该值是否存在于其他sku的quantity集合中
    3. 只要有一个sku_id=104的条目不满足条件,就把该id加入结果集合

代码实现

from itertools import groupby

# 原始数据
data = [
    (21, 2, 10.0),
    (21, 104, 20.0),
    (22, 1, 371.0),
    (22, 104, 742.0),
    (23, 1, 114.0),
    (23, 104, 228.0),
    (25, 1, 2.0),
    (25, 104, 2.0)
]

# 先按id排序,保证groupby能正确分组
sorted_data = sorted(data, key=lambda x: x[0])

invalid_ids = set()

# 按id分组遍历处理
for id_val, group in groupby(sorted_data, key=lambda x: x[0]):
    group_list = list(group)
    # 拆分sku104条目和其他条目
    sku104_items = [item for item in group_list if item[1] == 104]
    other_quantities = {item[2] for item in group_list if item[1] != 104}
    
    # 校验每个sku104条目
    is_invalid = False
    for item in sku104_items:
        required_qty = item[2] / 2
        if required_qty not in other_quantities:
            is_invalid = True
            break
    
    if is_invalid:
        invalid_ids.add(id_val)

print("不符合要求的id集合:", invalid_ids)
# 输出: 不符合要求的id集合: {25}

代码说明

  • 用集合存储其他sku的quantity,是因为集合的查找效率为O(1),比列表遍历更高效
  • 排序是itertools.groupby的必要前提,否则相同id但不连续的元素会被分成不同组
  • 只要分组内有一个sku104条目不满足条件,整个组就会被判定为无效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:20:13