2

我正在尝试从字典中的列表中获取值?不确定如何访问它?但这是我所做的,我收到一个错误,因为 TypeError:字符串索引必须是整数,而不是 str

lloyd = {
    "name": "Lloyd",
    "homework": [90.0, 97.0, 75.0, 92.0],
    "quizzes": [88.0, 40.0, 94.0],
    "tests": [75.0, 90.0]
}
alice = {
    "name": "Alice",
    "homework": [100.0, 92.0, 98.0, 100.0],
    "quizzes": [82.0, 83.0, 91.0],
    "tests": [89.0, 97.0]
}
tyler = {
    "name": "Tyler",
    "homework": [0.0, 87.0, 75.0, 22.0],
    "quizzes": [0.0, 75.0, 78.0],
    "tests": [100.0, 100.0]
}

for i in alice:
    print i['quizzes']

我正在学习 python,并且我还有一些疑问如果有人可以提供帮助,那将是 gr8 学习方面的帮助。在此先感谢。

1)如何访问键“作业”并在列表中求和其值?

2) 如何访问 dict alice 并对其所有键的值求和?家庭作业 + 测验 + 带有 sum() 函数的测试

3) 如何访问密钥“llyod”并获取列表的 len()?说“作业”

这是我尝试过的,我也遇到了同样的错误:

def average(x):
    for a in x: 
       return sum(a['homework']) / len(a['homework'])
       return sum(a['quizzes']) / len(a['quizzes'])
       return sum(a['tests']) / len(a['tests'])

如果有人可以请清除我对上述 3 个问题的疑虑。

4

4 回答 4

7

您正在遍历 的alice而不是值。你的键是字符串。即使您循环遍历这些值,其中的任何值都不alice能被'quizzes'. 您可以只打印alice['quizzes'],但这可能不是您想要开始的。

您想将所有命名字典放入一个“父”字典中:

students = {
    "lloyd": {
        "name": "Lloyd",
        "homework": [90.0, 97.0, 75.0, 92.0],
        "quizzes": [88.0, 40.0, 94.0],
        "tests": [75.0, 90.0]
    },
    "alice": {
        "name": "Alice",
        "homework": [100.0, 92.0, 98.0, 100.0],
        "quizzes": [82.0, 83.0, 91.0],
        "tests": [89.0, 97.0]
    },
    "tyler": {
        "name": "Tyler",
        "homework": [0.0, 87.0, 75.0, 22.0],
        "quizzes": [0.0, 75.0, 78.0],
        "tests": [100.0, 100.0]
    },
}

现在您可以遍历字典并访问每个学生的各种键:

for student_data in students.values():
    print student_data['quizzes']

注意这里的使用.values()循环字典的值,因为我们在这里不使用键。students

使用相同的循环来计算平均值,但请记住,遇到语句时函数会结束。return你总是可以通过返回一个元组从一个函数返回多个值:

def average(student):
    homework = ...
    quizzes = ...
    tests = ....
    return (homework, quizzes, tests)

或者你可以使用字典,例如。

于 2013-08-02T11:10:31.863 回答
2

问题1(如何访问键“作业”并在列表中求和其值?)

>>> sum(lloyd['homework'])
354.0

question2 作业+测验+测试

def findsum(x):
    return sum([sum(x['homework']),sum(x['quizzes']),sum(x['tests'])])

>>> findsum(lloyd)
741.0

问题3)如何访问键'llyod'并获取列表的len()?说“作业”

>>> len(lloyd['homework'])
4
于 2013-08-02T11:35:40.267 回答
0

更好的是,您对(键和值)都使用迭代。它更普遍。试试看,它有效:

values_of_alice=[]
for key, value in students.iteritems():
    if key == 'alice':
        values_of_alice.append(value)
for key2, value2 in values_of_alice[0].iteritems():
           if key2 == 'quizzes':
               print value2
于 2014-07-07T13:43:09.033 回答
0

这段代码:

 for i in alice:
        print i['quizzes']

获取字典 Alice 并迭代它的键,这些键是字符串。我想你想要的是:

print alice['quizzes']
于 2013-08-02T11:09:27.233 回答