我有一个收件人查询包含两个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')
Run Code Online (Sandbox Code Playgroud)
这给了我:
[
{
"recipient_id": 2,
},
{
"recipient_id": 2,
}
]
Run Code Online (Sandbox Code Playgroud)
你可以看到它应该是recipient_id 1,recipient_id 2然而,我的循环覆盖了值,为什么?
this_tem是对您在循环中反复修改和追加的单个对象(dict)的引用.您在循环中覆盖该键的值.
您需要在每次迭代时创建一个新的dict:
data = []
for item in recipients:
this_tem = {}
this_tem['recipient_id'] = item.pk
data.append(this_tem)
Run Code Online (Sandbox Code Playgroud)
编辑
正如Grijesh Chauhan慷慨地指出的那样,表达式和循环可以通过列表理解来简化:
data = [{'recipient_id': item.pk} for item in recipients]
Run Code Online (Sandbox Code Playgroud)