Voici mon code:
{ 'sara':{'gender':'f' , 'lan':'python'} , 'john':{'gender':'m' , 'lan':'python'}}
Ma contribution:
{'john':{'gender':'m' , 'lan':'python'}
La sortie doit être comme:
{ 'sara':{'gender':'f' , 'lan':'python'} , 'john':{'gender':'m' , 'lan':'python'}}
Mais j'obtiens toujours le dernier élément de dictionnaire que j'ai écrit dans l'entrée:
2 f.sara.python m.john.java
Comment puis-je le résoudre et obtenir un dictionnaire comme ci-dessous?
a = int(input()) for i in range(a): b = input() b = b.split(".")#creating a list #print(b) b[1]= b[1].lower() b[1]=b[1].capitalize() a=b[1] #print(b[1]) #print(b[0] , b [1] , b[2]) dic = {} dic_final={} dic={b[1] : {'name':b[0] ,'lan':b[2] }} dic_final.update(dic) del(dic) print(dic_final)
4 Réponses :
Vous écrasez le dictionnaire dic_final dans la boucle for à chaque fois. Cette ligne est à l'origine du problème dic_final={}
Solution: ajoutez cette ligne avant votre «boucle for» et supprimez la déclaration à l'intérieur. dic_final = dict()
Meilleur style de codage:
2 f.sara.python m.john.java {'Sara': {'gender': 'f', 'lan': 'python'}, 'John': {'gender': 'm', 'lan': 'java'}}
Production:
a = int(input()) dic_final = dict() for i in range(a): b = input() gender, name, lan = b.split(".") name = name.capitalize() dic_final.update({name : {"gender": gender, "lan": lan}}) print(dic_final)
Créez un dictionnaire global au lieu d'en créer un local dans la boucle for. De plus dans votre code, vous name
gender
comme name
2 f.sara.python m.john.java {'Sara': {'gender': 'f', 'lan': 'python'}, 'John': {'gender': 'm', 'lan': 'java'}}
Production:
a = int(input()) dic_final = {} for i in range(a): b = input() b = b.split(".") b[1]= b[1].lower() b[1]=b[1].capitalize() a=b[1] dic={b[1] : {'gender':b[0] ,'lan':b[2] }} dic_final.update(dic) del(dic) print(dic_final)
La raison pour laquelle vous n'obtenez que la dernière entrée est que vous réinitialisez le dictionnaire à chaque itération.
Tout ce que vous avez à faire est de rendre "dic_final" global.
c'est une solution très claire que j'ai trouvée
num_sample = int(input("how many test cases?: ")) final = {} for case in range(num_sample): new_case = input("insert new case: ") gender, name, lan = new_case.split(".") info = {"gender": gender, "lan": lan} final[name] = info #access final from here