我试图创建一个小型服务器类型的应用程序,有一个关于用dicts组织数据的问题。现在我正在使用连接套接字对数据进行分组(主要是为了验证数据来自何处以及用于将数据发回)。像这样:connected[socket] = account_data
。基本上,每个连接的人都会有账户数据。由于某些字段将大量用于比较和检查信息,例如帐户ID,所以我想用另一个dict加快速度
例如:要使用上述方法查找accountID,我必须使用For循环遍历connected中的所有可用连接,查看account_数据中每个连接的accountID,然后进行比较。这似乎是一个缓慢的方法。如果我可以创建一个dict并使用accountID作为键,我认为它可以加快速度。问题是,我计划使用3个不同的dicts,它们的顺序都不同。有些数据可能会频繁更改,一旦信息发生变化,更新每一个dict似乎更麻烦;有没有办法将它们链接在一起?在
也许解释我的问题的一个更简单的方法是: 你有Dict A,Dict B,Dict C和数据。Dict A、B和C都包含相同的数据。我想要这样,如果数据中有什么变化,dicta,B,C中的数据都会改变。我当然可以做dicta=data,dictb=data,等等,但是过了一段时间,代码就会重复。我知道数据是在dict创建后设置的,所以我不确定是否有解决方案。我只是在寻找在这种情况下组织数据的最佳方法的建议。在
首先,数据不需要复制。你可以有3个字典,每个字典都使用不同的键,但是它的值有相同的引用。在
这样做只需更改value对象一次,这将反映在所有字典中(或者更准确地说,因为字典只存储引用,所以它们将是最新的)。在
接下来需要确保“引用完整性”,即如果删除了某个特定的记录,则需要删除所有3个词典中相应的词典条目,并且,如果修改了记录,则现在具有已更改键的词典也需要删除该记录,并将其重新添加到新关键字下。这可以通过一个包含所有3个字典并具有Add()、Remove()和(如果适用)Update()方法的类来完成。在
如果您有对字典的引用,对字典的更新将反映到具有引用的所有内容。在
客户连接并保留一个套接字
sock
。您加载他的帐户并将其放入connections[sock]
。然后保留一个帐户id的字典(另一种方式),其中包含对帐户的引用accounts[account_id]
。让我们试试。。。在由于我们将
^{pr2}$account
分配到两个不同的位置,对该字典(在任一结构中)的任何更改都将反映在另一个字典中。所以。。。在我们在
update_username
中执行的更改将在执行sck.send
时自动获取,因为引用完全相同。在做一些类似的事情:
假设
^{pr2}$account_data
是一个具有属性的可变对象,这将在两个dict中引用同一个对象作为值,当然还有不同的键。它没有有在一个语句中,即:同一语句中的多个赋值只是一种方便;使它按您所希望的方式工作的原因是Python通常通过“对象引用”(在赋值、参数传递、返回语句等)进行操作。在
相关问题 更多 >
编程相关推荐