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



我正试图从dict中的列表中获取值?不确定如何访问?但以下是我所做的&我收到一个错误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) 如何访问dictalice&求和所有键的值?家庭作业+小测验+sum()函数测试

3) 如何访问密钥'llyod'&获取列表的长度()?说"家庭作业"

这就是我尝试的&我也得到了同样的错误:

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'])

如果有人能澄清我对以上三个问题的疑虑。

您在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(如何访问关键字"作业"并在列表中求和其值?)

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

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

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

问题3)如何访问密钥"llyod"&获取列表的长度()?说"家庭作业"

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

此代码:

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

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

print alice['quizzes']

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

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

最新更新