Je suis un programmeur de base python donc j'espère que la réponse à ma question sera facile. J'essaie de prendre un dictionnaire et de l'ajouter à une liste. Le dictionnaire change ensuite les valeurs, puis est à nouveau ajouté en boucle. Il semble que chaque fois que je fais cela, tous les dictionnaires de la liste changent leurs valeurs pour correspondre à celui qui vient d'être ajouté. 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 j'ai eu:
[{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 grandement appréciée.
Vous devez ajouter un copie, sinon vous ajoutez simplement des références au 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 masquer les types intégrés.
Mettez simplement dict = {}
à l'intérieur de la boucle.
>>> dict = {}
>>> list = []
>>> for x in range(0, 100):
dict[1] = x
list.append(dict)
dict = {}
>>> print list
Lorsque vous créez le dictionnaire adict
en dehors de la boucle, vous ajoutez le même dict à votre liste alist
. Cela signifie que toutes les copies pointent vers le même dictionnaire et que vous obtenez la dernière valeur {1:99}
à chaque fois. Créez simplement chaque dictionnaire dans 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)
Vous pouvez également utiliser Zip
et comprendre la liste pour faire ce dont vous avez besoin.
Si vous voulez que les valeurs dict commencent par une seule fois, utilisez range(1,100)
l = [dict(Zip([1],[x])) for x in range(1,100)]