如何在此代码中创建字典列表?

时间:2018-12-27 06:00:57

标签: python-3.x dictionary

我的名字和分数如下

input = {
        'Maths': dict(Mohsen=19, Sadegh=18, Hafez=15),
        'Physics': dict(Sadegh=16, Hafez=17, Mohsen=17),
        'Chemistry': dict(Hafez=13),
        'Literature': dict(Sadegh=14),
        'Biology': dict(Mohsen=16, Sadegh=10),
    }

如果某人没有任何课程,请考虑零分,同时获得分数人的平均值,并按平均值对最终名单进行排序,我想得到这样的输出。

answer = [
        dict(Name='Sadegh', Literature=14, Chemistry=0, Maths=18, Physics=16, Biology=10, Average=11.6),
        dict(Name='Mohsen', Maths=19, Physics=17, Chemistry=0, Biology=16, Literature=0, Average=10.4),
        dict(Name='Hafez', Chemistry=13, Biology=0, Physics=17, Literature=0, Maths=15, Average=9),
    ]

怎么做?

2 个答案:

答案 0 :(得分:0)

基本上,您有一本字典,其中的信息是根据科目排列的,每门科目都有学生标记。您想在单独的词典中收集与每个学生有关的所有信息。

可以尝试的方法之一如下: 尝试将您拥有的数据转换为学生特定的数据,然后可以计算出该学生所有科目的平均成绩。下面有一个示例代码。

  

请注意,这只是一个示例,您应该尝试   自己解决问题。可以使用多种替代方法,您应该自己进行探索。

以下代码适用于Python 2.7

from __future__ import division

def convert_subject_data_to_student_data(subject_dict):
    student_dict = {}

    for k, v in subject_dict.items():
        for k1, v1 in v.items():
            if k1 not in student_dict:
                student_dict[k1] = {k:v1}
            else:
                student_dict[k1][k] = v1

    student_list = []
    for k,v in student_dict.items():
        st_dict = {}
        st_dict['Name'] = k
        st_dict['Average'] = sum(v.itervalues()) / len(v.keys())
        st_dict.update(v)
        student_list.append(st_dict)

    print student_list

if __name__ == "__main__":
    subject_dict = {
        'Maths': dict(Mohsen=19, Sadegh=18, Hafez=15),
        'Physics': dict(Sadegh=16, Hafez=17, Mohsen=17),
        'Chemistry': dict(Hafez=13),
        'Literature': dict(Sadegh=14),
        'Biology': dict(Mohsen=16, Sadegh=10),
    }

    convert_subject_data_to_student_data(subject_dict)

答案 1 :(得分:0)

scrollbar