字符串索引必须是整数而不是str字典

时间:2013-08-02 11:07:49

标签: python python-2.7

我试图从字典中的列表中获取价值?不确定如何访问它?但这就是我的所作所为&我收到错误了 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,&我还有更多疑问如果有人能提供帮助,那将是学习方面的帮助。提前谢谢。

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 个答案:

答案 0 :(得分: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)
例如,

或者你可以使用字典。

答案 1 :(得分:2)

问题1(如何访问关键'家庭作业'并将其值列入清单?)

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

问题2作业+小测验+测试

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

>>> findsum(lloyd)
741.0

question3)如何访问密钥'llyod'&得到列表的len()?说'家庭作业'

>>> len(lloyd['homework'])
4

答案 2 :(得分:0)

此代码:

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

获取字典Alice并对其键进行迭代,键是字符串。我想你想要的是:

print alice['quizzes']

答案 3 :(得分: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