web-dev-qa-db-fra.com

mettre à jour le dictionnaire avec les clés dynamiques et les valeurs en python

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 

13
user850287

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))}
27
NPE

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
2
HelpNeeder

@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 :"))
1
jfs