Estoy tratando de cambiar una parte específica de un diccionario, usando Python 3.9 y el terminal VS Code, pero en la parte de cambio,

 elif choice=='2':
                    part_name = input('Which part are you willing to change?\n(CaSe SeNsEtIvE)\nname--age--score--ID? ')
                    if part_name in list_keys:
                        new_value = input("New value? ")
                    else:
                        print('part not found!')
                        ending()
                    listname[final[part_name]] = new_value
                    ending()

Devuelve un error TypeError: string indices must be integers cuando intento acceder al valor en el diccionario. ¿Cuál es el problema? Tenga en cuenta que strip_name.delspace es un módulo mío que elimina espacios en una cadena.

import os, msvcrt, strip_name
list_keys, listname = ['name', 'age', 'score', 'ID'], {'AsgharAkbari':{'name':"Asghar Akbari",'age': 28,'score': 86,'ID':23897},'amirrezavavsari':{'name':"amirreza vavsari",'age':15,'score': 94,'ID':53614}}
   

 def delete():
        os.system('cls')
        print("which student are you willing to delete? (print back to go back)")
      
            del_name = input("enter fullname(CaSe SeNsEtIvE): ")
       
            final = strip_name.delspace(del_name)
            if final in listname.keys():
                choice = input('1- Delete fully\n2-change a part')
                if choice=='1':
                    del listname[final]
                    ending()
                elif choice=='2':
                    part_name = input('Which part are you willing to change?\n(CaSe SeNsEtIvE)\nname--age--score--ID? ')
                    if part_name in list_keys:
                        new_value = input("New value? ")
                    else:
                        print('part not found!')
                        ending()
                    listname[final[part_name]] = new_value
           
0
Soroosh Yadollah Pour 14 ene. 2021 a las 23:38

2 respuestas

La mejor respuesta

En listname[final[part_name]], final es una cadena y estás intentando indexarla con part_name, que también es una cadena. Tal vez quisiste decir listname[final][part_name], que accede al valor de la clave part_name en el diccionario en la clave final en listname.

1
Armadillan 14 ene. 2021 a las 20:50

part_name se reconoce como una cadena porque en Python 3 input no verifica el tipo de datos. La solución sería convertir datos de entrada en números enteros:

part_name = int(input('foo'))
0
sbaginski 14 ene. 2021 a las 20:50
65726555