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