计算具有多个值的键的平均值

时间:2019-02-13 19:17:34

标签: python

我有以下嵌套数组:

[["Diane", 20],["Bion",25],["Jack",30],["Bion",40],["Diane",50],["Jack",20]]

我想计算每个人的平均值。例如,黛安的平均值= 35(50 + 20)/ 2。

3 个答案:

答案 0 :(得分:0)

尝试以下操作,使用临时defaultdict存储每个人的条目总数和条目数:

from collections import defaultdict

values = [["Diane", 20],["Bion",25],["Jack",30],["Bion",40],["Diane",50],["Jack",20]]

stats = defaultdict(lambda: {"num_entries": 0, "total": 0})

for name, value in values:
    stats[name]["num_entries"] += 1
    stats[name]["total"] += value

averages = {}

for name, stat in stats.items():
    averages[name] = stat["total"] / stat["num_entries"]

print(averages)

输出字典:{'Diane': 35.0, 'Bion': 32.5, 'Jack': 25.0}

答案 1 :(得分:0)

这有效:

values = [["Diane", 20],["Bion",25],["Jack",30],["Bion",40],["Diane",50],["Jack",20]]
people = {}
for i in values: # type(i) -> list. i[0] are names, i[1] are values.
    if i[0] in people: # Check if it have the key.
        people[i[0]][0] += i[1] # Add value.
        people[i[0]][1] += 1 # Add 1 to entries count.
    else:
        people.update({i[0]:[i[1],1]}) # A new entry is made.
result = {i:people[i][0]/people[i][1] for i in people}
print(result)

输出:

{'Diane': 30.0, 'Bion': 32.5, 'Jack': 25.0}

基本上,我制作一本字典(人),其名称像键和列表(总和和条目数)一样,检查名称是否重复(第一个用于)。然后,我制作另一个字典,其名称如键和上一个字典列表的内容划分。

答案 2 :(得分:0)

这将根据您的要求返回嵌套列表。

代码:

# Nested list of name and age
t = [["Diane", 20],["Bion",25],["Jack",30],["Bion",40],["Diane",50],["Jack",20]]

# Create a dictionary to combine all ages for a name
dict = {}
for k in t:
    if k[0] in dict:
        dict[k[0]].append(k[1])
    else:
        dict[k[0]] = [k[1]]

# Calculate average for each name
t2 = [] 
for key, value in dict.items():
    avg = sum(value) / float(len(value))
    t2.append([key, avg])

print(t2)

输入:

[["Diane", 20],["Bion",25],["Jack",30],["Bion",40],["Diane",50],["Jack",20]]

输出:

[['Diane', 35.0], ['Bion', 32.5], ['Jack', 25.0]]