我有一个收件人查询,其中包含两个收件人,ID 为 1 和 2: 我遍历每一个以构建 json 输出:
data = []
this_tem = {}
for item in recipients:
this_tem['recipient_id'] = item.pk
data.append(this_tem)
return HttpResponse(json.dumps(data), mimetype='application/json')
这给了我:
[
{
"recipient_id": 2,
},
{
"recipient_id": 2,
}
]
如您所见,它应该是 recipient_id 1
和 recipient_id 2
但是,我的循环覆盖了该值,为什么?
最佳答案
this_tem
是对您在循环中反复修改和追加的单个对象(字典)的引用。您在循环中覆盖该键的值。
每次迭代都需要创建一个新的字典:
data = []
for item in recipients:
this_tem = {}
this_tem['recipient_id'] = item.pk
data.append(this_tem)
编辑
正如 Grijesh Chauhan 慷慨地指出的那样,可以通过列表理解来简化表达式和循环:
data = [{'recipient_id': item.pk} for item in recipients]
关于Python 列表值被覆盖,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21702528/