AttributeError:“列表”对象在Python中没有属性“值”

时间:2020-07-20 15:27:34

标签: python

我想计算每个学生的整体成绩。将整体成绩添加到名为“ termterm_grades”的新词典中,以学生作为关键字,而整体成绩作为(整数)值。

grades = {
    "studentA" : [5, 2, 3, 1, 2, 4, 5, 5, 1, 1],
    "studentB" : [1, 2, 5, 5, 2, 0, 1, 5, 5, 2],
    "studentC" : [2, 5, 5, 5, 5, 0, 1, 3, 1, 0],
    "studentD" : [0, 1, 0, 5, 2, 5, 1, 3, 3, 5],
    "studentE" : [5, 4, 5, 5, 1, 5, 1, 4, 4, 5],
    "studentF" : [2, 2, 1, 1, 1, 3, 1, 3, 0, 1],
    "studentG" : [5, 5, 5, 5, 5, 4, 3, 5, 3, 1],
}
dct_sum = {k: sum(v.values()) for k, v in grades.items()}

但是,Python会抛出一条错误消息:AttributeError:'list'对象没有属性'values'

2 个答案:

答案 0 :(得分:3)

该错误无法清除。每个v都是每个列表,因此您试图获取列表没有的属性(.values()),因此请尝试对每个列表仅使用sum

dct_sum = {k: sum(v) for k, v in grades.items()}

此外,这是使用gaussian_kde的好方案:

from toolz.dicttoolz import valmap

dct_sum = valmap(sum,grades)

两个输出:

dct_sum
{'studentA': 29,
 'studentB': 28,
 'studentC': 27,
 'studentD': 25,
 'studentE': 39,
 'studentF': 15,
 'studentG': 41}

答案 1 :(得分:0)

v已经是键k的值列表。总结一下

>>> dct_sum = {k: sum(v) for k, v in grades.items()}
>>> dct_sum
{'studentA': 29, 'studentB': 28, 'studentC': 27, 'studentD': 25, 'studentE': 39, 'studentF': 15, 'studentG': 41}