Как мне заполнить значения моего словаря значениями из другого словаря, где их ключи одинаковы? - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть один словарь (dictDemCLass) с ключом, но все значения равны 0, и я планирую заполнить их значениями из другого словаря (dictAvgGrade). Мне нужно сделать так, чтобы ключи двух словарей были одинаковыми.

dictAvgGrade = {k:sum(v)/4 for k,v in studentPerf.items()}

dictDemClass = {k:0 for k in classes}

При печати (dictAvgGrade сокращается):

print(dictAvgGrade)
{('Jeffery', 'male', 'junior'): 0.7749999999999999, ('Able', 'male', 'senior'): 0.8200000000000001, ('Don', 'male', 'junior'): 0.7974999999999999, ('Will', 'male', 'senior'): 0.7975000000000001}

print(dictDemClass)

{'junior': 0, 'senior': 0, 'sophomore': 0}

В конечном итоге я хочу заполнить dictDemClass, чтобы показать среднее значение для каждого класса. Чтобы вывод мог выглядеть примерно так:

print(dictDemClass)

{'junior': 77.46, 'senior': 83.82, 'sophomore': 86.79}

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

если вы знаете, что dictAvgGrade всегда является подмножеством dictDemClass, вы можете сделать это

dictDemClass.update(dictAvgGrade)

в противном случае

если вы используете python3, вы можете сделать что-то вроде этого

for key in (dictDemClass.keys() & dictAvgGrade.keys()):
    dictDemClass[key] = dictAvgGrade[key]

если вы используете python2, вы можете сделать что-то вроде этого

for key in (set(dictDemClass.keys()) & set(dictAvgGrade.keys())):
    dictDemClass[key] = dictAvgGrade[key]
0 голосов
/ 19 ноября 2018

Вы можете использовать itertools.groupby для группировки элементов в dictAvgGrade по "классу" (т.е. младший, старший и т. Д.). Затем вы можете вычислить среднее значение для каждой группы и добавить его к dictDemClass.

Так что для примера, который вы разместили, это может быть что-то вроде следующего:

from itertools import groupby

dictAvgGrade = {('Jeffery', 'male', 'junior'): 0.7749999999999999, ('Able', 'male', 'senior'): 0.8200000000000001, ('Don', 'male', 'junior'): 0.7974999999999999, ('Will', 'male', 'senior'): 0.7975000000000001}
dictDemClass = {'junior': 0, 'senior': 0, 'sophomore': 0}

def get_class(x):
    return x[0][2]

for k, g in groupby(sorted(dictAvgGrade.items(), key=get_class), key=get_class):
    group = list(g)
    class_avg = sum(x[1] for x in group)/len(group)
    dictDemClass[k] = class_avg

print(dictDemClass)

Выход

{'senior': 0.8087500000000001, 'junior': 0.7862499999999999, 'sophomore': 0}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...