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

Python 计算具有多个值的键的平均值,python,Python,我有以下嵌套数组: [["Diane", 20],["Bion",25],["Jack",30],["Bion",40],["Diane",50],["Jack",20]] 我想计算每个人的平均数。例如,Diane的平均值=35(50+20)/2。尝试以下方法,使用临时的defaultdict存储每个人的条目总数和数量: from collections import defaultdict values = [["Diane", 20],["Bion",25],["Jack",30],["

我有以下嵌套数组:

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

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

尝试以下方法,使用临时的
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}

此功能:

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}

基本上,我制作了一本字典(人物),名字像键和列表(条目的总数和数量),检查名字是否重复(在第一个单词中)。然后,我制作了另一个字典,名字如键和上一个字典列表内容的划分。

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

代码:

# 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]]
输入:

# 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]]
输出:

# 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]]

这是一个嵌套列表,既不是数组也不是dict。