如何基于另一字典键值计算字典列表并按bid对应系数和降序排序
解决方法:基于系数字典计算并排序Bid列表
需求说明
遍历输入字典列表ininput,根据coefficient字典中的系数值,统计每个bid对应的所有itype的系数总和,最终按系数总和的降序输出bid列表。
示例输入
coefficient = {'dr e': 2.0, 'ph': 1.0, 'c-in': 0.8, 'bk': 0.25} ininput = [ {"itype":"ph","bid":1}, {"itype":"bk","bid":2}, {"itype":"c_in","bid":3}, {"itype":"dr e","bid":4}, {"itype":"c_in","bid":4} ]
预期输出
[4, 1, 3, 2]
常见错误点分析
- 键名不匹配:
ininput中的c_in和coefficient中的c-in格式不一致(下划线 vs 横杠),会导致无法正确获取系数 - 未正确累加总和:没有对同一
bid的多个itype系数进行分组累加 - 排序逻辑错误:未按系数总和的降序排列
bid
修正后的完整代码
coefficient = {'dr e': 2.0, 'ph': 1.0, 'c-in': 0.8, 'bk': 0.25} ininput = [ {"itype":"ph","bid":1}, {"itype":"bk","bid":2}, {"itype":"c_in","bid":3}, {"itype":"dr e","bid":4}, {"itype":"c_in","bid":4} ] # 统计每个bid的系数总和 bid_coeff_total = {} for entry in ininput: itype = entry['itype'] bid = entry['bid'] # 统一键名格式,解决c_in和c-in的匹配问题 standardized_itype = itype.replace('_', '-') # 获取系数,不存在则取0.0 current_coeff = coefficient.get(standardized_itype, 0.0) # 累加总和 if bid in bid_coeff_total: bid_coeff_total[bid] += current_coeff else: bid_coeff_total[bid] = current_coeff # 按系数总和降序排序bid sorted_bid_list = sorted(bid_coeff_total.keys(), key=lambda x: bid_coeff_total[x], reverse=True) print(sorted_bid_list)
代码关键说明
- 键名标准化:通过
replace('_', '-')将输入中的c_in转换为c-in,确保和系数字典的键匹配 - 累加逻辑:用字典
bid_coeff_total存储每个bid的累计系数,遍历输入时逐步更新 - 排序实现:使用
sorted()函数,通过key参数指定按系数总和排序,reverse=True实现降序排列
运行代码后会输出预期的[4, 1, 3, 2]。
内容的提问来源于stack exchange,提问作者tanafor
相关产品推荐
相关产品推荐

