我有以下嵌套数组:
[["Diane", 20],["Bion",25],["Jack",30],["Bion",40],["Diane",50],["Jack",20]]
我想计算每个人的平均值。例如,黛安的平均值= 35(50 + 20)/ 2。
答案 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]]