【问题标题】:Appending a dictionary value to a list in python将字典值附加到python中的列表
【发布时间】:2019-03-29 13:14:44
【问题描述】:

我无法将与键“id”一致的学生字典值附加到列表中。非常感谢任何帮助!

students = list();
students.append( {'id':12345, 'first_name':'Alice', 
'last_name':'Anderson','assignments':[('assignment_1',0),('assignment_2',2), 
('assignment_3',3)]})
students.append({'id':22345, 'first_name':'John', 
'last_name':'Sparks','assignments':[('assignment_1',2),('assignment_2',3), 
('assignment_3',4)]})
students.append({'id':32345, 'first_name':'Taylor', 
'last_name':'Mason','assignments':[('assignment_1',3),('assignment_2',2), 
('assignment_3',3)]})

def return_passing(students):    
    grade_sum = 0
    counter = 0
    for s in students:  #loop thru students
        for assignment, grade in s['assignments']: 
            grade_sum += grade
            counter += 1
            average = grade_sum / counter
            lst = list()
        if average >= 2.0:
        lst.append((s['id']))
        return lst

return_passing(students) 

print(return_passing(students))   

【问题讨论】:

  • 你得到什么错误?
  • 我没有收到错误。我似乎无法获得要附加到列表的值。
  • 那么通过的同学是:22345, 32345对吧?

标签: python python-3.x list dictionary append


【解决方案1】:

在错误的地方初始化事物有几个问题,因此它们会被重置。这些解释在 cmets 中:

def return_passing(students):    
    lst = [] # initialize lst here
    for s in students:  #loop thru students
        grade_sum = 0 # reset these for each student
        counter = 0
        for assignment, grade in s['assignments']: 
            grade_sum += grade
            counter += 1
        # now that we have gone throug all assignments
        # compute average
        average = float(grade_sum) / counter # convert to float for precision
        if average >= 2.0:
            lst.append(s['id'])
    return lst # return only after you've gone through all students

【讨论】:

  • 很好的解释!谢谢。
猜你喜欢
  • 2023-02-02
  • 2020-10-14
  • 1970-01-01
  • 2023-03-23
  • 2017-11-15
  • 1970-01-01
  • 2016-01-16
  • 2020-12-06
相关资源
最近更新 更多