如何从字典数据列表中计算出字典的平均值?

时间:2018-10-03 14:14:46

标签: python dictionary average

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)?

5 个答案:

答案 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)