Как рассчитать среднее значение словаря из списка словарных данных? - PullRequest
0 голосов
/ 03 октября 2018
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 голосов
/ 03 октября 2018

Вы можете определить класс, чтобы помочь спроецировать ваш набор данных:

class π(list):
    def __getitem__(self, *args, **kwargs):
        return (a.__getitem__(*args, **kwargs) for a in self)

И затем вычислить среднее значение для проекции:

sum(π(student_data)['Rank'])/len(student_data)
0 голосов
/ 03 октября 2018

Это выражение может быть напечатано напрямую.Мы можем получить сумму всех значений ключа Rank, используя sum([i['Rank'] for i in student_data]), и мы можем получить число для нашего знаменателя, используя len(student_data), которое равно числу Rank, которые мы суммировали, чтодаст нам среднее значение, которое мы можем print

print(sum([i['Rank'] for i in student_data])/len(student_data)) # => 48.2
0 голосов
/ 03 октября 2018

Переберите свой список диктов и соберите значение 'Rank' для каждого из них.Затем вычислите среднее значение.

>>> _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)
0 голосов
/ 03 октября 2018

Вы можете использовать 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
0 голосов
/ 03 октября 2018

Есть много способов сделать это.Вы можете попробовать это явно:

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