如何基于Python列表构建指定结构的嵌套字典
构建嵌套字典的实现方法
首先,我们需要将每个工厂(fab_centrum中的元素)对应到一组销售线数据,每条销售线再关联对应的分数。以下是适合新手的两种实现方式:
方法一:循环实现(易理解)
fab_centrum = ['A', 'B'] sales_line = ['1AA', '2BB', '3CC', '1AA', '2BB', '3CC'] keys = ['feasibility_score', 'capacity_score'] feasibility_score = [10,30,40, 10,30,40] capacity_score = [50,60,70, 50,60,70] # 计算每个工厂对应的销售线条数 per_fab_count = len(sales_line) // len(fab_centrum) batch = {} for i, fab in enumerate(fab_centrum): # 截取当前工厂对应的数据集 start = i * per_fab_count end = start + per_fab_count current_sales = sales_line[start:end] current_feas = feasibility_score[start:end] current_cap = capacity_score[start:end] # 构建当前工厂的销售线-分数字典 sales_dict = {} for sl, feas, cap in zip(current_sales, current_feas, current_cap): sales_dict[sl] = { keys[0]: feas, keys[1]: cap } # 将销售线字典添加到外层工厂字典中 batch[fab] = sales_dict print(batch)
代码说明:
per_fab_count:计算每个工厂分配到的销售线条数(这里是6条÷2个工厂=3条/工厂)。enumerate(fab_centrum):同时获取工厂的索引和名称,方便截取对应的数据切片。zip(current_sales, current_feas, current_cap):将销售线、可行性分数、容量分数一一配对,批量生成子字典。
方法二:字典推导式(更简洁)
如果熟悉Python的推导式写法,可以用更紧凑的代码实现:
fab_centrum = ['A', 'B'] sales_line = ['1AA', '2BB', '3CC', '1AA', '2BB', '3CC'] keys = ['feasibility_score', 'capacity_score'] feasibility_score = [10,30,40, 10,30,40] capacity_score = [50,60,70, 50,60,70] per_fab_count = len(sales_line) // len(fab_centrum) batch = { fab: { sl: {keys[0]: feas, keys[1]: cap} for sl, feas, cap in zip( sales_line[i*per_fab_count:(i+1)*per_fab_count], feasibility_score[i*per_fab_count:(i+1)*per_fab_count], capacity_score[i*per_fab_count:(i+1)*per_fab_count] ) } for i, fab in enumerate(fab_centrum) } print(batch)
注意:
为什么不能直接用dict.fromkeys(fab_centrum, sales_line)?因为dict.fromkeys会让所有工厂共享同一个值对象(比如这里的sales_line列表),后续修改其中一个工厂的内容会影响所有工厂,无法实现每个工厂独立的嵌套字典结构。
内容的提问来源于stack exchange,提问作者onhalu
相关产品推荐
相关产品推荐

