添加到字典的条目将被覆盖

时间:2019-09-09 13:50:37

标签: python django-rest-framework

有一个初始化的字典,序列化器提供一些数据,并通过迭代项目列表来添加到嵌套数组中:

$ /usr/sbin/getenforce
Disabled

但是我没有接收到唯一项列表(预期使用list = {"shopping_list": []} item = {} count = 0 stuff = json.loads(serializer.data["stuff_file"]) for s in stuff: item["level"] = count item["position"] = count * 10 item["item_name"] = s["name"] list["shopping_list"].append(item) count += 1 方法),而是获得了具有正确项数的列表,但是以前的所有项都被最新项覆盖,例如:

append

我应该如何写入列表以使所有项目都唯一,例如:

{
    "shopping_list": [
        {
            "level": 2,
            "position": 20,
            "item_name": "Bronze Badge"

        },
        {
            "level": 2,
            "position": 20,
            "item_name": "Bronze Badge"

        },
        {
            "level": 2,
            "position": 20,
            "item_name": "Bronze Badge"

        }
    ]
}

1 个答案:

答案 0 :(得分:1)

与其在循环外创建变量,不如在循环内创建item

list = {"shopping_list": []}
count = 0

stuff = [{"name": "Gold Badge"}, {"name": "Silver Badge"}, {"name": "Bronze Badge"}]

for s in stuff:
  item = {}
  item["level"] = count
  item["position"] = count * 10
  item["item_name"] = s["name"]

  list["shopping_list"].append(item)
  count += 1

print(list)

输出:

{'shopping_list': [{'level': 0, 'position': 0, 'item_name': 'Gold Badge'}, {'level': 1, 'position': 10, 'item_name': 'Silver Badge'},{'level': 2, 'position': 20, 'item_name': 'Bronze Badge'}]}

@DeepSpace指出,您还可以使用字典文字:

for s in stuff:
  list["shopping_list"].append({'level': count, 'position': count * 10, 'item_name': s['name']})
  count += 1

实际上,您可以摆脱count变量,也可以这样做:

for count, s in enumerate(stuff):
  list["shopping_list"].append({'level': count, 'position': count * 10, 'item_name': s['name']})
相关问题