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

如何使用字典数值控制列表迭代,向子列表指定位置插入对应键

代码修正方案

原代码问题原因

  • 两处break直接打断了循环逻辑:外层for循环的break导致只处理第一个年份就直接退出循环,内层while的break导致每个年份只处理1个元素就跳出循环
  • itertools.repeat()生成的156个元素是同一个列表对象的引用,修改任意一个子列表都会同步修改所有子列表
  • 字典内存在笔误键'20116',应为重复的'2016'条目或其他年份,该条目是总和为156的必要项,下方示例中暂时删除了该错误条目,你可以根据实际需求修改为正确的年份值即可
  • 循环判断条件逻辑错误,没有按每个年份对应的数量批量处理区间内的子列表

修正后完整代码

import random

# 可根据实际需求补全年份条目凑够总长度156
races_per_season = {
    '2015': "19",
    '2016': "21",
    '2017': "20",
    '2018': "21",
    '2019': "21",
    '2020': "17",
    '2021': "16"
}

# 用列表推导式生成156个独立的子列表,避免引用同一对象的问题
tmp_list = [random.sample(range(80), 10) for _ in range(156)]
total_races = 0

for year, count in races_per_season.items():
    count = int(count)
    # 批量处理当前年份对应的count个子列表
    for idx in range(total_races, total_races + count):
        tmp_list[idx].insert(1, year)
    # 偏移指针到下一个年份的起始位置
    total_races += count

# 验证输出
for x in tmp_list:
    print(x)

额外说明

如果使用Python3.7以下版本,字典默认不保留插入顺序,无法保证年份按从小到大的顺序插入,可以将races_per_season改为有序结构,如下所示:

from collections import OrderedDict
races_per_season = OrderedDict([
    ('2015', "19"),
    ('2016', "21"),
    ('2017', "20"),
    ('2018', "21"),
    ('2019', "21"),
    ('2020', "17"),
    ('2021', "16")
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:15:05