【问题标题】:how to create list of dictionary in this code?如何在此代码中创建字典列表?
【发布时间】:2018-12-27 06:00:57
【问题描述】:

我有一些名字和分数如下

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),
    ]

怎么做?

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 你应该循环键和它们的值。试试看,用你的代码更新你的问题。然后,我们可以帮助您编写代码,而不是您的直接作业。

标签: python-3.x dictionary


【解决方案1】:

基本上,您有一本字典,其中的信息是根据科目排列的,对于每个科目,您都有学生分数。您希望在单独的字典中收集与每个学生相关的所有信息。

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

请注意,这只是一个示例,您应该尝试一下 自己解决。有许多替代方法,您应该自己探索它们。

以下代码适用于 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)

【讨论】:

    【解决方案2】:
    sample_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),
      }
    
    
    def foo(lessons):
        result = {}
        for lesson in lessons:
            for user in lessons[lesson]:#dictionary
                if result.get(user):
                    #print(result.get(user))
                    result.get(user).setdefault(lesson, lessons[lesson].get(user,0))
                else:
                    result.setdefault(user, dict(name=user))
                    result.get(user).setdefault(lesson,lessons[lesson].get(user,0))
        #return list(result.values())
        return result.values()
    
    
    #if name == '__main__':
    print(foo(sample_input))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多