我在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中清楚地划分百分比。
答案 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}}]