Python Forum

Full Version: TypeError: string indices must be integers, not str
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi,

I have a piece of code with the following type error:
Error:
TypeError: string indices must be integers, not str
I am new to Python and got stuck in my code. Would you please help me figure out whats the problem?
Many thanks



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]
}
def get_average(student):
    homework = 0
    quizzes = 0
    tests = 0
    for key in student:
        homework =sum(key["homework"])/len(key["homework"])
        quizzes = sum(key["quizzes"])/len(key["quizzes"])
        tests = sum(key["tests"])/len(key["tests"])
    res = 0.1 * homework + 0.3 * quizzes + 0.6 * tests 
    print key["name"], float(res)
    
student = [alice,tyler]
get_average(student)
Please use the forums bbcode tags.

The code shown does not report the error shown, Please show matching code to error traceback.
Your key variable is a string, so key["name"] is indeed trying to index a string with another string. Perhaps you want student["name"]. But it is not clear why you want to iterate on the keys...
@Ofnuts actually in the above code student is list of dicts, so key is a dict. Yoritz is correct that the above code is not the one that produce this error. However due to the incorect indentation it prints only the last name, res pair.
TypeError: means that you are trying to perform an operation on a value whose type is not compatible with that operation. If you are accessing items from a dictionary , make sure that you are accessing the dictionary itself and not a key in the dictionary. TypeError: string indices must be integers has been caused because you are trying to access values from dictionary using string indices instead of integer.