有效地计算字典中键的平均值

Efficiently calculate averages of keys in dictionary

我有一本看起来像这样的字典:

    'TICKET_URL/3250': {'cycle_time': 0, 'lead_time': 2496441},
    'TICKET_URL/3323': {'cycle_time': 346087, 'lead_time': 508469},
    'TICKET_URL/3328': {'cycle_time': 249802, 'lead_time': 521211},
    'TICKET_URL/3352': {'cycle_time': 504791, 'lead_time': 504791},
    'TICKET_URL/3364': {'cycle_time': 21293, 'lead_time': 21293},
    'TICKET_URL/3367': {'cycle_time': 102558, 'lead_time': 189389},
    'TICKET_URL/3375': {'cycle_time': 98735,  'lead_time': 98766}
}

如何有效计算平均值 cycle_timelead_time(独立)。现在我正在遍历字典两次——一次是 cycle_time,一次是 lead_time。我可以一次性完成吗?

目前:

average_cycle = (
    sum([story["cycle_time"] for story in stories.values()]) / len(stories)
)
count = len(stories.values())
cycle_total = 0
lead_total = 0
for story in stories.values():
    cycle_total += story.get("cycle_time", 0)
    lead_total += story.get("lead_time", 0)

cycle_avg = cycle_total / count
lead_avg = lead_total / count

如果你不介意pandas,

import pandas as pd

pd.DataFrame(data.values()).mean().to_dict()

将产生:

{'cycle_time': 189038.0, 'lead_time': 620051.4285714285}

作为奖励,它还能很好地处理缺失值。

我确实没有发现您当前的实施存在问题。我建议添加一个 avg() 函数以提高可读性:

def avg(x):
    return sum(x) / len(x) 
avg_cycle = avg([story['cycle_time'] for story in stories.values()])
avg_lead_time = avg([story['lead_time'] for story in stories.values])