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中添加新的内容时,都先获取旧数据,然后再添加新数据?这似乎效率很低
在可以存储多个数据之前,可能需要重新考虑存储数据所基于的结构。目前,
roles
字段只是一个重新分配的对象,它将替换旧数据。为了获得预期的行为,即存储多个角色,您必须存储对象列表因此,有效地
转换为类似以下内容:
如您所见,现在可以在
roles
字段下存储多个角色。按照指定修复文档结构后,可以在if语句下编辑代码块,如下所示:编辑:根据对问题所做的编辑,您似乎有不同的roleIDs。在这种情况下,您不需要更改数据的结构。您只需向
roles
字典添加一个新字段。您可以使用普通的旧索引来实现这一点编辑后的代码类似于:
在上面的代码片段中,我们使用
dictionary[key] = value
构造将role_id
字段设置为新获取的delay
值dict
中项目的键必须是唯一的,因此您在第二段代码中给出的示例是不可能的如果要在
guildID[roles]
中存储多个角色,请将该角色的值设置为一个列表,然后可以根据需要将其追加或更新如果您在特定的
dict
中没有角色,那么这里有一个有用的函数来确保您创建列表,它是dict.setdefault
:编辑:根据问题的更新,您可能需要:
这意味着您不必为添加的第一个角色创建特殊情况,以便在}
guildID
中创建dict
{相关问题 更多 >
编程相关推荐