Django словарь с тем же значением
Я пытаюсь создать словарь с некоторыми определенными значениями, но он получает несколько одинаковых значений
readers = Readers.objects.all()
count = 0
readersResult = {}
teste = {
"avatar": "",
"firstName": "",
"percent": "",
"lastName": ""
}
for reader in readers:
test["percent"] = "value from another place"
test["firstName"] = reader.firstName
test["lastName"] = reader.lastName
test["avatar"] = reader.avatar
print("TEST: ", test)
readersResult[count] = test
count = count + 1
print("RESULT":, readersResult)
Мой вывод:
web_1 | TEST: {'avatar': '/images/avatars/71.png', 'firstName': 'abc', 'percent': '37.08999158957107', 'lastName': 'def'}
web_1 | TEST: {'avatar': '/images/avatars/61.png', 'firstName': 'abc', 'percent': '4.037005887300253', 'lastName': 'def'}
web_1 | RESULT: {0: {'avatar': '/images/avatars/61.png', 'firstName': 'abc', 'percent': '4.037005887300253', 'lastName': 'def'}, 1: {'avatar': '/images/avatars/61.png', 'firstName': 'abc', 'percent': '4.037005887300253', 'lastName': 'def'}}
Что я делаю не так?
Вы присваиваете один и тот же словарь (test) нескольким записям в readersResult, в отличие от создания нового словаря для каждого reader.
В качестве значения словаря можно использовать список:
readers = Readers.objects.all()
count = 0
readersResult = {}
test = {
"avatar": [],
"firstName": [],
"percent": [],
"lastName": []
}
for reader in readers:
test["percent"].append("value from another place")
test["firstName"].append(reader.firstName)
test["lastName"].append(reader.lastName)
test["avatar"].append(reader.avatar)
print("TEST: ", test)
readersResult[count] = test
count = count + 1
print("RESULT":, readersResult)
Здесь, в вашем коде, вы создаете dict с именем test, а затем в каждой итерации цикла вы добавляете его снова в readersResult.
test = {
"avatar": "",
"firstName": "",
"percent": "",
"lastName": ""
}
for reader in readers:
test["percent"] = "value from another place"
test["firstName"] = reader.firstName
test["lastName"] = reader.lastName
test["avatar"] = reader.avatar
print("TEST: ", test)
readersResult[count] = test
count = count + 1
Вам нужно создавать новый dict с каждой итерацией цикла. Поэтому поменяйте эту часть кода на следующую:
for reader in readers:
test = {}
test["percent"] = "value from another place"
test["firstName"] = reader.firstName
test["lastName"] = reader.lastName
test["avatar"] = reader.avatar
print("TEST: ", test)
readersResult[count] = test
count = count + 1
PS: Вам не нужно использовать приведенный ниже код для определения ключей в словаре, а затем устанавливать их значения в другом месте. Поэтому вы можете изменить:
teste = {
"avatar": [],
"firstName": [],
"percent": [],
"lastName": []
}
с:
test = {}