有一个初始化的字典,序列化器提供一些数据,并通过迭代项目列表来添加到嵌套数组中:
$ /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"
}
]
}
?
答案 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']})