Python 列表值被覆盖,为什么?

标签 python django

我有一个收件人查询,其中包含两个收件人,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 1recipient_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/

相关文章:

python - django//原始查询必须包含主键

python - 我如何停止rabbitmq worker 中间脚本?

python - 如何访问pytorch分类模型的预测? (伯特)

django - Django 运行多线程或多进程吗?

python - Django Rest Framework - 如何测试 ViewSet?

django 服务器(托管在 ec2 ubuntu 上)对多个用户失败

python - 确定整数是否介于其他两个整数之间

python - 为什么我的 Python 包的分类器没有出现在测试 PyPI 上?

Python 深度列表比较

django - 使用 Django 从 CDN 和本地目录提供静态文件