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

如何基于另一字典键值计算字典列表并按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]

常见错误点分析

  1. 键名不匹配:ininput中的c_in和coefficient中的c-in格式不一致(下划线 vs 横杠),会导致无法正确获取系数
  2. 未正确累加总和:没有对同一bid的多个itype系数进行分组累加
  3. 排序逻辑错误:未按系数总和的降序排列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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:50:20