如何遍历嵌套字典计算各行程折扣得分并存储为字典
问题描述
现有三个嵌套字典,分别存储不同行程的各项数据:
A = {'tr_1': {'hos': 100.0, 'dy': 100.0}, 'tr_2': {'hos': 100.0, 'dy': 50.0}, 'tr_3': {'hos': 100.0, 'dy': 50.0}} B = {'tr_1': {'cor': 160, 'ner': 0}, 'tr_2': {'cor': 69, 'ner': 36.14}, 'tr_3': {'cor': 63, 'ner': 41.69}} C = {'tr_1': {'st': 0, 'st_c': 100.0}, 'tr_2': {'st': 1368, 'st_c': 0}, 'tr_3': {'st': 1366, 'st_c': 0}}
已有针对单个行程的得分计算逻辑(简化版):
dis = {} A_single = {'dy':18} B_single = {'ner':89} C_single = {'st_c':56} eff = (20 * A_single['dy']) + (20 * B_single['ner']) + (20 * C_single['st_c']) dis['value'] = eff
需要对每个行程(tr_1、tr_2、tr_3)执行相同的得分计算,最终生成如下格式的结果字典:
dis = {'tr_1': {'eff':32},'tr_2': {'eff':45},'tr_3': {'eff':23}}
实现方案
直接遍历所有行程ID,依次取出每个行程在三个字典中的对应字段,代入公式计算后存入结果字典即可:
# 原始数据字典(统一第三个字典变量名为大写C,避免命名混乱) A = {'tr_1': {'hos': 100.0, 'dy': 100.0}, 'tr_2': {'hos': 100.0, 'dy': 50.0}, 'tr_3': {'hos': 100.0, 'dy': 50.0}} B = {'tr_1': {'cor': 160, 'ner': 0}, 'tr_2': {'cor': 69, 'ner': 36.14}, 'tr_3': {'cor': 63, 'ner': 41.69}} C = {'tr_1': {'st': 0, 'st_c': 100.0}, 'tr_2': {'st': 1368, 'st_c': 0}, 'tr_3': {'st': 1366, 'st_c': 0}} dis = {} # 遍历所有行程ID(假设三个字典的行程ID完全一致,直接从A的键中获取) for trip_id in A: # 提取当前行程的目标字段值 dy_val = A[trip_id]['dy'] ner_val = B[trip_id]['ner'] st_c_val = C[trip_id]['st_c'] # 代入得分公式计算(可简化为提取公因子20的写法) eff_score = 20 * (dy_val + ner_val + st_c_val) # 将结果存入目标字典 dis[trip_id] = {'eff': eff_score} # 验证结果 print(dis)
补充说明
- 如果三个字典的行程ID存在不一致的情况,可以用
set(A.keys()) | set(B.keys()) | set(C.keys())获取所有行程ID的并集来遍历,避免遗漏。 - 简化后的公式
20 * (dy_val + ner_val + st_c_val)和原逻辑计算结果完全一致,代码更简洁易读。
内容的提问来源于stack exchange,提问作者Sushil Kokil
相关产品推荐
相关产品推荐

