Alguien puede explicar por qué ocurre el comportamiento mencionado a continuación, en el modo de depuración, por qué no puedo actualizar un valor de elemento de lista:
No entiendo, ¿qué estoy haciendo mal? Mi código:
if request.method == "GET":
coordinates = mongo_harassments_utils.get_geolocated({})
count = coordinates.count()
for i in range(coordinates.count()):
first = coordinates[i]["story"]
coordinates[i]["story"] = "Test"
second = coordinates[i]["story"]
Respuestas
1 para la respuesta № 1En tu ejemplo coordinates
no es una lista, sino una pymongo.cursor.Cursor
. Debe coaccionarlo explícitamente en una lista para que el código funcione:
if request.method == "GET":
coordinates = list(mongo_harassments_utils.get_geolocated({}))
count = len(coordinates)
for i in range(len(coordinates)):
first = coordinates[i]["story"]
coordinates[i]["story"] = "Test"
second = coordinates[i]["story"]
Además, la indexación explícita a menudo se considera un anti-patrón en Python. Para tu caso enumerate
es perfectamente aplicable
for i, coordinate in enumerate(coordinates):
first = coordinate["story"]
coordinate["story"] = "Test"
second = coordinate["story"]
Tenga en cuenta que con enumerate
ya no necesitas hacer coordinates
una lista.
0 para la respuesta № 2
Sospecho que el problema es que no es una lista. No todos los iterables son listas, y en su situación particular, las "coordenadas" se ven como un cursor mongodb.