列表中的总和数组

时间:2018-09-29 10:19:50

标签: python python-3.x

我有这段代码(摘自 verbatim ,摘自Kyran Dale的“基于JavaScript的Python数据可视化”第二章中的第二个示例)

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_student_data.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总和数组”之类的东西,但是没有什么乐趣。

我将很感激:

  1. 代码修复,更重要的是
  2. 彻底解释此代码在哪里出了错

1 个答案:

答案 0 :(得分:3)

您的输入数据不是单个rules.List,而是request.resource.data.keys().hasOnly(['EmailAddress', 'CostPrice']) == true dict中的一个。因此,您将不得不对其进行迭代并分别对每个list进行操作:

dict

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

dict