Получить среднее значение ключей в словаре, которые находятся во вложенном словаре - PullRequest
0 голосов
/ 05 августа 2020

Допустим, я хочу получить средние значения для всех клавиш "Jazz", однако я хочу сделать это для каждого отдельного ключа во вложенном словаре.

def average_ratings(aDict) :
    for key in aDict :
        if "Jazz" in aDict:
            mySum = 0
            numNums = 0
            while value in aDict['Jazz'] :
                mySum = mySum + value
                numNums = numNums + 1
            jazzValue = mySum / numNums
            return jazzValue
        if "Rock" in aDict :
            summ = 0
            num = 0
            while value in aDict["Rock"] :
                summ = summ + 1
                num = num + 1
            rockValue = summ / num
            return rockValue

Это мой словарь проходящий через

{'Justin Trudeau': {'Hits': 4, 'Jazz': 3, 'Rock': 7, 'Reggae': 7, 'Dance': 7, 'Blues': 6, 'Rap': 4}, 'Bob Jones': {'EDM': 4, 'Dance': 3, 'Hits': 1, 'Rock': 3, 'Opera': 4, 'Funk': 3, 'Soul': 6, 'Metal': 8, 'Classical': 9}, 'Sam Frizzel': {'Rap': 7, 'Hits': 6, 'Soul': 2, 'EDM': 5, 'Pop': 3, 'Reggae': 3, 'Hip Hop': 5}, 'Captain Nemo': {'Dance': 4, 'Rock': 2, 'Classical': 10, 'World': 8, 'Jazz': 9, 'Hip Hop': 6, 'Soul': 4, 'Metal': 2}}

1 Ответ

0 голосов
/ 05 августа 2020
In [33]: a = {'Justin Trudeau': {'Hits': 4, 'Jazz': 3, 'Rock': 7, 'Reggae': 7, 'Dance': 7, 'Blues': 6, 'Rap': 4}, 'Bob
    ...:  Jones': {'EDM': 4, 'Dance': 3, 'Hits': 1, 'Rock': 3, 'Opera': 4, 'Funk': 3, 'Soul': 6, 'Metal': 8, 'Classica
    ...: l': 9},'Sam Frizzel': {'Rap': 7, 'Hits': 6, 'Soul': 2, 'EDM': 5, 'Pop': 3, 'Reggae': 3, 'Hip Hop': 5}}
    ...:

In [34]: jazz = [a[i].get('Jazz',0) for i in a if 'Jazz' in a[i]]

In [35]: print(sum(jazz)/len(jazz))
3.0

Обновление:

from collections import defaultdict

a = {'Justin Trudeau': {'Hits': 4, 'Jazz': 3, 'Rock': 7, 'Reggae': 7, 'Dance': 7, 'Blues': 6, 'Rap': 4}, 'Bob Jones': {'EDM': 4, 'Dance': 3, 'Hits': 1, 'Rock': 3, 'Opera': 4, 'Funk': 3, 'Soul': 6, 'Metal': 8, 'Classical': 9}, 'Sam Frizzel': {'Rap': 7, 'Hits': 6, 'Soul': 2, 'EDM': 5, 'Pop': 3, 'Reggae': 3, 'Hip Hop': 5}, 'Captain Nemo': {'Dance': 4, 'Rock': 2, 'Classical': 10, 'World': 8, 'Jazz': 9, 'Hip Hop': 6, 'Soul': 4, 'Metal': 2}}

avgs = defaultdict(list)

for k,v in a.items():
    for i in v:
        avgs[i].append(v[i])
    
for k,v in avgs.items():
    print(f"Average of {k} is {sum(v)/len(v)}")

Вывод:

Average of Hits is 3.6666666666666665
Average of Jazz is 6.0
Average of Rock is 4.0
Average of Reggae is 5.0
Average of Dance is 4.666666666666667
Average of Blues is 6.0
Average of Rap is 5.5
Average of EDM is 4.5
Average of Opera is 4.0
Average of Funk is 3.0
Average of Soul is 4.0
Average of Metal is 5.0
Average of Classical is 9.5
Average of Pop is 3.0
Average of Hip Hop is 5.5
Average of World is 8.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...