具有相同值的 Django 字典

Django dictionary with the same value

我正在尝试创建一个包含某些特定值的字典,但它多次获得相同的值:

readers = Readers.objects.all()
count = 0
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

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)

可以找到示例 here

在这里,在您的代码中,您创建了一个 dict 命名测试,然后在每个循环迭代中再次将其添加到 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 = {}