lis中的和数组

2024-09-27 09:32:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这段代码(取自Kyran Dale在JavaScript上使用Python进行数据可视化的第2章中的第二个示例)

student_data = [
  {'name': 'Bob',   'id':0, 'scores':[68, 75, 56, 81]},
  {'name': 'Alice', 'id':1, 'scores':[75, 90, 64, 88]},
  {'name': 'Carol', 'id':2, 'scores':[59, 74, 71, 68]},
  {'name': 'Dan',   'id':3, 'scores':[64, 58, 53, 62]},
]

def  process_student_data(sdata, pass_threshold = 60, merit_threshold = 75):
    av = sum(sdata['scores'])/float(len(sdata['scores'])) # <<== PROBLEM LINE!!

    sdata ['average'] = av

    if av > merit_threshold:
        sdata['assessment'] = 'Passed with merit'
    elif av > pass_threshold:
        sdata['assessment'] = 'Passed'
    else:
        sdata['assessment'] = 'Failed'

    print("%s's (id: %d) final assessment is: %s" %(sdata['name'], sdata['id'], sdata['assessment'].upper()))

if __name__ == '__main__':
    process_student_data(student_data)

但是关于运行“python do\u”的学生_数据.py“(我的文件名)我得到的错误是:

  File "do_student_data.py", line 9, in process_student_data
    print(sdata['scores'])
TypeError: list indices must be integers or slices, not str

我以前编程过(C,Delphi,Java),我可以看到解释器在说什么,但我就是不知道如何修复它。我在google上搜索过“Python sum array in list”和类似的东西,但没有乐趣。你知道吗

我将非常感谢:

  1. 代码修复,更重要的是
  2. 彻底的解释了这个代码错误的原因

Tags: 数据代码nameiddatathresholdpassprocess
1条回答
网友
1楼 · 发布于 2024-09-27 09:32:10

您的输入数据不是一个dict,而是listdictlist。因此您必须对其进行迭代,并分别对每个dict执行操作:

def  process_student_data(student_data, pass_threshold = 60, merit_threshold = 75):
    for sdata in student_data:  # iterate the list!
        # float(...) cast not strictly necessary in Python3
        av = sum(sdata['scores'])/float(len(sdata['scores'])) 
        # ...

>>> process_student_data(student_data)
Bob's (id: 0) final assessment is: PASSED
Alice's (id: 1) final assessment is: PASSED WITH MERIT
Carol's (id: 2) final assessment is: PASSED
Dan's (id: 3) final assessment is: FAILED

或者,您可以保持函数的原样,并在循环中调用它:

for sdata in student_data:
    process_student_data(sdata)

相关问题 更多 >

    热门问题