J'ai un dictionnaire et je veux insérer des clés et des valeurs de manière dynamique, mais je n'ai pas réussi à le faire. Le problème est que lorsque j'utilise la méthode de mise à jour, elle n'ajoute pas de paire mais supprime les valeurs précédentes. Je n'ai donc que la dernière valeur lors de l'impression du dictionnaire . Voici mon code.
i = 0
for o in iterload(f):
i=i+1
mydic = {i : o["name"]}
mydic.update({i : o["name"]})
for k, v in mydic.items():
print(k,v)
print(mydic)
f est un fichier que je suis en train d’analyser avec du code python
{3: 'toto'}
qui est le dernier élément. y a-t-il une solution pour avoir tous les éléments de mon dictionnaire
Merci d'avance
J'ai encore une question
Maintenant, je dois vérifier si une valeur d'entrée est égale à une clé de mon dictionnaire et si oui, je dois obtenir la valeur de cette clé pour continuer à analyser le fichier et obtenir d'autres informations.
Voici mon code:
f = open('myfile','r')
nb_name = input("\nChoose the number of the name :")
for o in iterload(f):
if o["name"] == mydic[nb_name]:
...
Je reçois un keyError
Traceback (most recent call last):
File ".../test.py", line 37, in <module>
if o["name"] == mydic[nb_name]:
KeyError: '1'
Je ne comprends pas le problème
Supprimez la ligne suivante:
mydic = {i : o["name"]}
et ajoutez ce qui suit avant votre boucle:
mydic = {}
Sinon, vous créez un nouveau dictionnaire à un élément à chaque itération.
En outre, les éléments suivants:
mydic.update({i : o["name"]})
est écrit de manière plus concise
mydic[i] = o["name"]
Enfin, notez que la boucle entière peut être réécrite sous forme de dictionnaire:
mydic = {i+1:o["name"] for i,o in enumerate(iterload(f))}
Vous pouvez utiliser len()
pour insérer la valeur:
#!/usr/bin/python
queue = {}
queue[len(queue)] = {'name_first': 'Jon', 'name_last': 'Doe'}
queue[len(queue)] = {'name_first': 'Jane', 'name_last': 'Doe'}
queue[len(queue)] = {'name_first': 'J', 'name_last': 'Doe'}
print queue
@NPE a signalé le problème dans votre code (redéfinition du dict à chaque itération).
Voici un autre moyen de générer le dict (code Python 3):
from operator import itemgetter
mydict = dict(enumerate(map(itemgetter("name"), iterload(f)), start=1))
À propos du KeyError: '1'
: input()
renvoie une chaîne en Python 3 mais le dictionnaire mydict
attend un entier. Pour convertir la chaîne en entier, appelez int
:
nb_name = int(input("\nChoose the number of the name :"))