python - 添加字典而不是覆盖 - defaultdict

标签 python dictionary defaultdict

我有一个名为“n”的字典,其中有一个键值关系(字典中的字典)。

此处的 key 将是tenant_id (b77865b66fd544e0841aa7dbca8bdc97, 7b73b9644e8242b3a740afc4659d9829)

因此,Dict 将具有键值对关系,其中包含tenant_id 及其相关实例名称。

示例代码:

    n = defaultdict(dict)

    r = q.all()

    # For getting the values of sql obj
    for m in r:

            g = m.__dict__

            g.pop('_sa_instance_state', None)

            tenant_id = g['tenant_id']

            n[tenant_id] = g

    n = json.dumps(n, default=json_util.default)

因此,现在一个租户将拥有多个实例。

在这里,我面临着覆盖与 key 相关的值的问题。

我需要在此处添加字典而不是覆盖它。

在这里,我提供了相同的结果以使其有意义。

预期结果:

{u'b77865b66fd544e0841aa7dbca8bdc97': {u'instance_name': u'instance_for_test'},{u'instance_name': u'new_instance'}, u'7b73b9644e8242b3a740afc4659d9829': {u'instance_name': u'demo'}}

实际结果:

{u'b77865b66fd544e0841aa7dbca8bdc97': {u'instance_name': u'new_instance'}, u'7b73b9644e8242b3a740afc4659d9829': {u'instance_name': u'demo'}}

有人让我知道该问题的解决方案。

注意:

我尝试过追加和扩展等,但由于它是字典,所以似乎不起作用。

最佳答案

n = defaultdict(dict)
# ...
n[tenant_id] = g

确实用tenant_id 的值覆盖该键。不要使用 = 设置值,而是对结果调用方法,如下所示:

n = defaultdict(dict)
n[tenant_id].update(g)

由于您的预期结果不是有效的 Python,您可能需要列表值而不是字典。简单:

n = defaultdict(list)
# ...
n[tenant_id].append(g)

关于python - 添加字典而不是覆盖 - defaultdict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35593238/

相关文章:

swift - 获取字典内的字典数据

python - 创建和查找每个值具有多个键的 2D 字典

python - 如何连接或组合具有重叠键的默认字典的两个默认字典?

python - 如何调试永不停止运行的代码?

python - 如何去除和大写从 Excel 文件派生的数据框中的列——避免 unicode/str 错误消息

python - 部署 django 时自动终止 fastcgi 进程

python - 如何使用 SQLAlchemy 在 Flask 中执行原始 sql 查询和使用模型对象

python - 需要从一个txt文件读入字典

dictionary - 通过迭代字典定义新变量的有效方法 (Julia)

python - 过滤掉两个嵌套字典之间不共享的键