我有一个带键的字典(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}
答案 0 :(得分:2)
您可以使用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}
答案 1 :(得分:0)
如果您知道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]