如何使用字典数值控制列表迭代,向子列表指定位置插入对应键
代码修正方案
原代码问题原因
- 两处
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
相关产品推荐
相关产品推荐

