student_data = [{'id':1, 'Hacker' : 'DOSHI', 'Rank' : 43},
{'id':2, 'Hacker' : 'JOSHI', 'Rank' : 45},
{'id':3, 'Hacker' : 'MOSHI', 'Rank' : 41},
{'id':4, 'Hacker' : 'LOSHI', 'Rank' : 98},
{'id':5, 'Hacker' : 'AOSHI', 'Rank' : 14}]
1。在这里,我想计算“排名”的平均值? 2.换句话说,我想获得平均值(43,45,41,98,14)?
答案 0 :(得分:1)
有很多方法可以做到这一点。您可以尝试以下明确的方法:
student_data = [{'id':1, 'Hacker' : 'DOSHI', 'Rank' : 43},
{'id':2, 'Hacker' : 'JOSHI', 'Rank' : 45},
{'id':3, 'Hacker' : 'MOSHI', 'Rank' : 41},
{'id':4, 'Hacker' : 'LOSHI', 'Rank' : 98},
{'id':5, 'Hacker' : 'AOSHI', 'Rank' : 14}]
counter = 0
sumRank = 0
for i in student_data:
sumRank+=i['Rank']
counter = counter+1
average = sumRank/counter
print(average)
您还可以尝试使用一种班轮解决方案(使用list comprehension
):
print(sum([i['Rank'] for i in student_data])/len(student_data))
答案 1 :(得分:1)
遍历字典列表,并从每个字典中收集“等级”值。然后计算平均值。
>>> _list = [d['Rank'] for d in student_data]
>>> average = sum(_list)/len(_list)
>>> average
48
或者,按照@timgeb的建议甚至更好
average = sum(d['Rank'] for d in student_data)/len(student_data)
答案 2 :(得分:1)
您可以使用operator.itemgetter
:
from operator import itemgetter
res_manual = sum(map(itemgetter('Rank'), student_data)) / len(student_data) # 48.2
或者,向量化后,您可以使用第三方库,例如Pandas:
import pandas as pd
res_pd = pd.DataFrame(student_data)['Rank'].mean() # 48.2
答案 3 :(得分:0)
此表达式可以直接打印。我们可以使用Rank
来获取键sum([i['Rank'] for i in student_data])
的所有值的总和,并且可以使用len(student_data)
来获得分母的数字,该数字等于{{1 }}是我们的总和,可以得出平均值,我们可以Rank
print
答案 4 :(得分:0)
您可以定义一个类来帮助投影数据集:
class π(list):
def __getitem__(self, *args, **kwargs):
return (a.__getitem__(*args, **kwargs) for a in self)
然后计算投影的平均值:
sum(π(student_data)['Rank'])/len(student_data)