mise à jour du dictionnaire dynamique des clés et des valeurs dans python
J'ai un dictionnaire et que je veux insérer des clés et des valeurs dynamiquement, mais je n'ai pas réussi à le faire. Le problème est que lorsque j'utilise la méthode de mise à jour il n'ajoute pas une paire, mais il supprime les valeurs précédentes j'ai donc uniquement 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 analyse avec du code python
en conséquence, je reçois
{3: 'toto'}
qui est le dernier élément. est-il une solution pour avoir tous les éléments dans mon dictionnaire
Merci d'avance
J'ai une autre question
Maintenant, j'ai besoin de vérifier si une valeur d'entrée est égale à une clé de mon dictionnaire et si j'ai besoin de récupérer la valeur de cette clé de continuer l'analyse du 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 obtenir 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
OriginalL'auteur user850287 | 2012-12-13
Vous devez vous connecter pour publier un commentaire.
Supprimer la ligne suivante:
et ajoutez la ligne suivante avant la boucle:
Sinon, vous êtes la création d'une nouvelle marque d'un dictionnaire d'éléments à chaque itération.
En outre, la suivante:
est plus concise que
Enfin, de noter que la totalité de la boucle peut être réécrit comme un dictionnaire de compréhension:
vous pouvez passer
start=1
àenumerate()
pour correspondre à code à partir de la question sansi+1
OriginalL'auteur NPE
Vous pouvez utiliser
len()
pour insérer la valeur:OriginalL'auteur HelpNeeder
@NPE, a souligné le problème dans votre code (redéfinir le dict à chaque itération).
Voici une façon de plus pour générer le dict (Python 3 du code):
Sur le
KeyError: '1'
:input()
retourne une chaîne de caractères en Python 3, mais le dictionnairemydict
attend un entier. Pour convertir la chaîne en entier, appelint
:dict(enumerate((x['name'] for x in iterload(f)),start=1))
, ou éventuellement déplacer laenumerate
:dict((i,x['name]) for i,x in enumerate(iterload(f),start=1))
. J'ai remplacémap
avec un générateur d'expression. En python3, c'est la même chose, mais cela va faire exactement la même chose dans python3 et python2-et je pense que c'est un peu plus facile à lire.renvoie une liste en Python 2. Pour le rendre Python 2 code vous pouvez ajouter
from itertools import imap as map
. Pour des raisons de lisibilité, je voudrais utiliser le dict compréhension de @NPE réponse.Je suis conscient que la carte doit retourner une liste de py2k. Mais le code ne serait probablement encore du travail (sauf si le fichier est énorme) -- dans ce cas, de stocker les données dans un dict peut ne pas fonctionner non plus. Le dict-de la compréhension, c'est sympa, mais il impose un python2.7 minimum. Ma version avec
dict
est une tentative pour répondre à un heureux moyen-générateurs qui se comportent comme votremap
, mais le travail pour python2.x et à mon humble avis sont plus faciles à lire + à l'aide de ladict
constructeur pour créer le dict d'une manière qui est compatible avec les anciennes versions de python. (et il n'a vraiment pas de lire très différent de celui du dict-comp)OriginalL'auteur jfs