resueltos - que es un diccionario en python
Anexando un diccionario a una lista en un loop Python (4)
Cuando crea el diccionario adict
fuera del bucle, está agregando el mismo dictamen a su alist
. Significa que todas las copias apuntan al mismo diccionario y que obtiene el último valor {1:99}
cada vez. Simplemente crea cada diccionario dentro del bucle y ahora tienes tus 100 diccionarios diferentes.
alist = []
for x in range(100):
adict = {1:x}
alist.append(adict)
print(alist)
Soy un programador básico de Python, así que espero que la respuesta a mi pregunta sea fácil. Estoy tratando de tomar un diccionario y adjuntarlo a una lista. El diccionario luego cambia los valores y luego se agrega nuevamente en un bucle. Parece que cada vez que hago esto, todos los diccionarios de la lista cambian sus valores para que coincidan con el que se acaba de agregar. Por ejemplo:
>>> dict = {}
>>> list = []
>>> for x in range(0,100):
... dict[1] = x
... list.append(dict)
...
>>> print list
Asumiría que el resultado sería [{1:1}, {1:2}, {1:3}... {1:98}, {1:99}]
pero en su lugar obtuve:
[{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}]
Cualquier ayuda es muy apreciada.
Debe adjuntar una copia , de lo contrario, simplemente está agregando referencias al mismo diccionario una y otra vez:
yourlist.append(yourdict.copy())
Utilicé yourdict
y yourlist
lugar de dict
y list
; no desea enmascarar los tipos incorporados.
Solo pon dict = {}
dentro del bucle.
>>> dict = {}
>>> list = []
>>> for x in range(0, 100):
dict[1] = x
list.append(dict)
dict = {}
>>> print list
También puede usar zip
y comprensión de listas para hacer lo que necesita.
Si desea que los valores de dict empiecen en un range(1,100)
uso range(1,100)
l = [dict(zip([1],[x])) for x in range(1,100)]