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

如何基于动态字典列表计算NRR?求技术实现思路

计算动态字典列表的净跑垒率(NRR)

别担心,咱们一步步拆解这个问题,不管是继续用enumerate还是换其他更直接的方法,都能轻松搞定!

首先先明确你的数据结构——我假设你的动态列表大概是这样的(如果结构有差异,核心逻辑依然通用):

match_data = [
    {"runs": 165, "balls": 120},
    {"runs": 192, "balls": 115},
    # 后续会动态添加更多比赛字典
]

方法一:继续用enumerate(适合需要跟踪比赛索引的场景)

你之前用enumerate拿到了索引和字典,接下来只需要从每个字典里提取runs和balls的值,套用公式计算就行。这里要注意避免除以0的错误,以及处理字典键可能缺失的情况:

for index, match in enumerate(match_data):
    # 用get方法避免KeyError,同时设置默认值
    runs = match.get("runs", 0)
    balls = match.get("balls", 0)
    
    if balls == 0:
        # 根据业务逻辑处理,比如设为0或者抛出提示
        nrr = 0.0
    else:
        nrr = (runs / balls) * 100
    
    print(f"第{index + 1}场比赛的NRR: {nrr:.2f}")

enumerate在这里的作用只是帮你标记是第几个元素,如果你不需要跟踪索引,完全可以不用它——看下面的更简洁方法。

方法二:直接遍历列表(无需索引时首选)

如果不需要知道是第几场比赛,直接遍历列表里的每个字典就行,还可以顺便计算总NRR:

total_runs = 0
total_balls = 0

for match in match_data:
    runs = match.get("runs", 0)
    balls = match.get("balls", 0)
    
    # 计算单场NRR
    single_nrr = (runs / balls) * 100 if balls != 0 else 0.0
    print(f"单场NRR: {single_nrr:.2f}")
    
    # 累加总数据用于计算总NRR
    total_runs += runs
    total_balls += balls

# 计算总NRR
if total_balls != 0:
    overall_nrr = (total_runs / total_balls) * 100
else:
    overall_nrr = 0.0
print(f"\n所有比赛的总NRR: {overall_nrr:.2f}")

额外注意事项

  • 边界处理:一定要判断balls是否为0,否则会触发ZeroDivisionError,这是实际场景里很容易踩的坑。
  • 键安全访问:用dict.get(key, default)代替直接dict[key],可以避免因为某个字典缺失runs或balls键导致的报错。
  • 动态列表适配:不管你的列表是静态还是动态添加元素,只要保持字典的键一致,上面的代码都能直接复用——新增的字典会在遍历的时候自动被计算。

内容的提问来源于stack exchange,提问作者nihkil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:04:58