如何规范化python中的百分比

时间:2015-04-30 02:23:44

标签: python math numpy dictionary percentage

我在python中有一个字典列表,表示国家/地区代码,并为不同的服务器命中百分比。

[{'country': 'BR', 'values': {'Server1': [100.0, 100.0]}},
 {'country': 'IE', 'values': {'Server1': [61.7868], 'Server2': [38.2132]}},
 {'country': 'US', 'values': {'Server1': [82.19], 'Server2': [100.0]}}]

我想将其转换为单个值,保持百分比不变。所以我将列表中的值加起来并按照

中的长度进行划分
for key_dict in resp:
averages = {}
for name, numbers in key_dict['values'].items():
    averages[name] = sum(numbers) / len(numbers)
key_dict['values'] = averages

但在大多数情况下,这并没有达到正确的百分比。例如,上述解决方案将导致。

[{'country': 'BR', 'values': {'Server1': [100.0]}},
 {'country': 'IE', 'values': {'Server1': [61.7868], 'Server2': [38.2132]}},
 {'country': 'US',
  'values': {'Server1': [100.0, 92.8571, 100.0, 100.0, 18.1078],
             'Server2': [100.0, 100.0]}}]

很明显,'US sum both the Server1 and Server2`超过了100。如何在python中清楚地划分百分比。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您首先要计算服务器内的平均百分比。然后,您希望修改该平均值,以表示给定国家/地区内所有服务器的平均时间。因此,对于“BR”,您可以将该平均值除以1个服务器,但对于其他两个服务器,您将除以2个服务器。这可以通过执行以下操作来完成:

resp = [{"country": "BR", "values": {"Server1": [100.0, 100.0]}},
    {"country": "IE", "values": {"Server2": [38.2132], "Server1": [61.7868]}},
    {"country": "US", "values": {"Server2": [100.0, 100.0],
    "Server1":[100.0, 92.8571, 100.0, 100.0, 18.1078]}}]

for d in resp:
    num_severs = len(d['values'])
    for s in d['values']:
        # Calculate average pct for each server
        avg_pct = sum(d['values'][s]) / len(d['values'][s])

        # Equalize the average
        d['values'][s] = avg_pct / num_severs

这会将resp修改为:

[{'country': 'BR', 'values': {'Server1': 100.0}}, {'country': 'IE', 'values': {'Server1': 30.8934, 'Server2': 19.1066}}, {'country': 'US', 'values': {'Server1': 41.09649, 'Server2': 50.0}}]