Python嵌套字典将数据附加到嵌套dict,而不覆盖以前的数据

2024-09-30 01:28:10 发布

您现在位置:Python中文网/ 问答频道 /正文

async for document in client.auto_role.find({}):
    if client.auto_role_cache.get(document.get("guildID")):
        client.auto_role_cache[document.get("guildID")]["roles"] = {document.get("roleID"): document.get("delay")}
    else:
        client.auto_role_cache[document.get("guildID")] = {"roles": {document.get("roleID"): document.get("delay")}}

嘿,只是想知道如果guildID在dict中(意味着dict中已经有角色了),我如何在不删除旧角色的情况下向其中添加更多角色? 上面的代码块用新数据替换旧数据

guildID {roles: {roleID1: delayHere, roleID2: delayHere}

每次添加新数据时,是否必须覆盖整个dict?或者是否有类似的东西。追加到列表中

当然,我不必每次想在嵌套的dict中添加新的内容时,都先获取旧数据,然后再添加新数据?这似乎效率很低


Tags: 数据client角色cacheautogetasyncdocument
2条回答

在可以存储多个数据之前,可能需要重新考虑存储数据所基于的结构。目前,roles字段只是一个重新分配的对象,它将替换旧数据。为了获得预期的行为,即存储多个角色,您必须存储对象列表

因此,有效地

{"roles": {...}}

转换为类似以下内容:

{"roles": [{...}, {...}, ...]}

如您所见,现在可以在roles字段下存储多个角色。按照指定修复文档结构后,可以在if语句下编辑代码块,如下所示:

# Create a new role
new_role = {document.get("roleID"): document.get("delay")}

# Append the new role to the list
client.auto_role_cache[document.get("guildID")]["roles"].append(new_role)

编辑:根据对问题所做的编辑,您似乎有不同的roleIDs。在这种情况下,您不需要更改数据的结构。您只需向roles字典添加一个新字段。您可以使用普通的旧索引来实现这一点

编辑后的代码类似于:

# Get the new role ID and delay
role_id = document.get("roleID")
delay = document.get("delay")

# Append the new role to the list
client.auto_role_cache[document.get("guildID")]["roles"][role_id] = delay

在上面的代码片段中,我们使用dictionary[key] = value构造将role_id字段设置为新获取的delay

dict中项目的键必须是唯一的,因此您在第二段代码中给出的示例是不可能的

如果要在guildID[roles]中存储多个角色,请将该角色的值设置为一个列表,然后可以根据需要将其追加或更新

如果您在特定的dict中没有角色,那么这里有一个有用的函数来确保您创建列表,它是dict.setdefault

>>> guildID = {}
>>> guildID
{}
>>> guildID.setdefault("roles", []).append("my_role")
>>> guildID.setdefault("roles", []).append("my_role2")
>>> guildID
{'roles': ['my_role', 'my_role2']}
>>> 

编辑:根据问题的更新,您可能需要:

>>> guildID = {}
>>> guildID.setdefault("roles", {})["my_role"] = 123
>>> guildID.setdefault("roles", {})["my_role2"] = 123
>>> guildID
{'roles': {'my_role': 123, 'my_role2': 123}}

这意味着您不必为添加的第一个角色创建特殊情况,以便在guildID中创建dict{}

相关问题 更多 >

    热门问题