Python中如何基于两个关联字典生成箱内商品映射字典?
解决方案:将订单-箱映射转换为箱-商品映射
实现思路
- 初始化空字典存储最终的箱-商品对应关系
- 遍历订单到箱的映射,逐个处理每个订单
- 根据订单号从商品字典中取出对应商品列表
- 将商品列表合并到对应箱号的列表中,若箱号未在结果字典中则先初始化空列表
代码实现
方法1:普通字典循环实现
orders_to_bins = {1: 'a', 2: 'a', 3: 'b'} items = { 1: [49,50,51,62], 2: [60,63,64,65], 3: [70,71,72,74] } items_in_bins = {} for order_num, bin_id in orders_to_bins.items(): order_items = items[order_num] if bin_id not in items_in_bins: items_in_bins[bin_id] = [] items_in_bins[bin_id].extend(order_items) print(items_in_bins) # 输出:{'a': [49, 50, 51, 62, 60, 63, 64, 65], 'b': [70, 71, 72, 74]}
方法2:使用collections.defaultdict简化代码
defaultdict会自动为不存在的键创建默认空列表,省去手动判断的步骤:
from collections import defaultdict orders_to_bins = {1: 'a', 2: 'a', 3: 'b'} items = { 1: [49,50,51,62], 2: [60,63,64,65], 3: [70,71,72,74] } items_in_bins = defaultdict(list) for order_num, bin_id in orders_to_bins.items(): items_in_bins[bin_id].extend(items[order_num]) # 可选:将defaultdict转换为普通字典 items_in_bins = dict(items_in_bins) print(items_in_bins) # 输出:{'a': [49, 50, 51, 62, 60, 63, 64, 65], 'b': [70, 71, 72, 74]}
内容的提问来源于stack exchange,提问作者mars
相关产品推荐
相关产品推荐

