Ajouter un dictionnaire à une liste dans une boucle de Python
je suis un programmeur de base de python donc j'espère que la réponse à ma question sera facile. Je suis en train de prendre un dictionnaire et l'ajouter à une liste. Le dictionnaire change ensuite les valeurs puis est ajouté à nouveau dans une boucle. Il semble qu'à chaque fois que je fais cela, tous les dictionnaires de la liste changent leurs valeurs pour correspondre à celle qui vient d'être ajoutée. Par exemple:
>>> dict = {}
>>> list = []
>>> for x in range(0,100):
... dict[1] = x
... list.append(dict)
...
>>> print list
je suppose que le résultat serait [{1:1}, {1:2}, {1:3}... {1:98}, {1:99}]
mais au lieu de cela j'ai:
[{1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}]
Toute aide est la grandement apprécié.
4 réponses
Vous devez ajouter un copier, sinon vous êtes juste de l'ajout de références pour le même dictionnaire, encore et encore:
yourlist.append(yourdict.copy())
j'ai utilisé yourdict
et yourlist
au lieu de dict
et list
; vous ne voulez pas de masque de type intégré.
quand vous créez le adict
dictionnaire en dehors de la boucle, vous ajoutez la même dict pour votre alist
liste. Cela signifie que toutes les copies pointent vers le même dictionnaire et vous obtenez la dernière valeur {1:99}
à chaque fois. Il suffit de créer chaque dictionnaire à l'intérieur de la boucle et maintenant vous avez vos 100 dictionnaires différents.
alist = []
for x in range(100):
adict = {1:x}
alist.append(adict)
print(alist)
vient de mettre dict = {}
dans la boucle.
>>> dict = {}
>>> list = []
>>> for x in range(0, 100):
dict[1] = x
list.append(dict)
dict = {}
>>> print list
vous pouvez aussi utiliser zip
et la compréhension de liste à faire ce que vous avez besoin.
si vous voulez que les valeurs de dict commencent à une utilisation range(1,100)
l = [dict(zip([1],[x])) for x in range(1,100)]