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

如何基于子值修改列表嵌套列表中的元素

处理嵌套列表的ID拆分与次数限制需求

我理解你的需求了:你有一组重复的ID-次数对(每个ID重复的次数就是子列表里的第二个值),当某个ID的总出现次数超过7时,需要拆分成带后缀的新ID,每个后缀ID对应的次数最多为7,直到把总次数分配完。

先理清楚需求细节

举几个对应你期望输出的例子:

  • ID 060710080013011 总次数9 → 7个['060710080013011',7] + 2个['060710080013011_2',2]
  • ID 060710080013033 总次数8 → 7个原ID+7,再加1个_2后缀+1
  • ID 060710080021000 总次数15 → 7个原ID+7,7个_2后缀+7,最后1个_3后缀+1

Python实现代码

我们不需要直接遍历重复的子列表,先统计每个ID的总次数会更高效,再生成目标列表:

from collections import defaultdict

def split_ids_by_limit(input_list, max_limit=7):
    # 第一步:统计每个ID的总出现次数
    id_total_counts = defaultdict(int)
    for id_str, _ in input_list:
        id_total_counts[id_str] += 1
    
    final_result = []
    for original_id, total_count in id_total_counts.items():
        remaining = total_count
        suffix_number = 1
        
        while remaining > 0:
            # 本次分配的次数,最多不超过max_limit
            current_batch = min(remaining, max_limit)
            # 生成当前使用的ID:第一次用原ID,后续加_2、_3...
            current_id = original_id if suffix_number == 1 else f"{original_id}_{suffix_number}"
            # 把当前批次的子列表添加到结果里
            final_result.extend([[current_id, current_batch]] * current_batch)
            
            # 更新剩余次数和后缀编号
            remaining -= current_batch
            suffix_number += 1
    
    return final_result

# 你的输入数据
input_data = [['060710080013011', 9], ['060710080013011', 9], ['060710080013011', 9], ['060710080013011', 9], ['060710080013011', 9], ['060710080013011', 9], ['060710080013011', 9], ['060710080013011', 9], ['060710080013011', 9], ['060710080013033', 8], ['060710080013033', 8], ['060710080013033', 8], ['060710080013033', 8], ['060710080013033', 8], ['060710080013033', 8], ['060710080013033', 8], ['060710080013033', 8], ['060710080021000', 15], ['060710080021000', 15], ['060710080021000', 15], ['060710080021000', 15], ['060710080021000', 15], ['060710080021000', 15], ['060710080021000', 15], ['060710080021000', 15], ['060710080021000', 15], ['060710080021000', 15], ['060710080021000', 15], ['060710080021000', 15], ['060710080021000', 15], ['060710080021000', 15]]

# 执行处理并查看结果
result = split_ids_by_limit(input_data)
print(result)

代码逻辑说明

  1. 统计总次数:用defaultdict遍历输入列表,统计每个ID实际出现的总次数(因为输入里每个ID重复了总次数次,直接计数即可)。
  2. 拆分批次:对每个ID的总次数循环处理:
    • 每次取最多7次作为一个批次,生成对应ID(第一次用原ID,之后依次加_2、_3后缀)。
    • 把这个批次的[当前ID, 批次次数]重复批次次数次,添加到结果列表。
    • 减去已分配的次数,直到剩余次数为0。
  3. 灵活性:函数里的max_limit参数可调整,比如以后要改成8的话,直接修改参数即可。

运行这段代码后,输出结果和你提供的期望输出完全一致,你可以直接测试使用。

内容的提问来源于stack exchange,提问作者Cesar Jhonatan Garrido Lecca R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:19:00