Чи може хтось пояснити, чому нижчезазначена поведінка відбувається в режимі налагодження, чому я не можу оновити значення елемента списку:
Я не розумію, що я роблю неправильно? Мій код:
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"]
Відповіді:
1 для відповіді № 1У вашому прикладі coordinates
- це не список, а а pymongo.cursor.Cursor
. Вам потрібно явно примусити його до списку, щоб код працював:
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"]
Крім того, явна індексація часто вважається антидіаграмою в Python. Для вашого випадку enumerate
чудово застосовується
for i, coordinate in enumerate(coordinates):
first = coordinate["story"]
coordinate["story"] = "Test"
second = coordinate["story"]
Зверніть увагу, що з enumerate
вам більше не потрібно робити coordinates
список.
0 для відповіді № 2
Я підозрюю, що проблема полягає в тому, що це не список. Не всі ітерабелі є списками, і у вашій конкретній ситуації "координати" схожі на курсор mongodb.