繁体   English   中英

AttributeError: 'list' object 在 Python 中没有属性 'values'

[英]AttributeError: 'list' object has no attribute 'values' in Python

我想计算每个学生的总成绩。 在名为 midterm_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' object has no attribute 'values'

错误再清楚不过了。 每个v都是每个列表,因此您试图获取列表没有的属性( .values() ),因此请尝试仅对每个列表使用sum

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

此外,这是使用toolz.dicttoolz.valmap的好场景:

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}

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}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM