我有两本字典:
dict1 = agent_id:agent_email
dict2 = user_id:agent_id
我想创建一个字典:
^{pr2}$如何在dict2中搜索dict1中的每个agent_id并返回关联的密钥?有人告诉我,创建一个键列表然后搜索是非常缓慢的。有没有更快的方法?在
这个被认为是个傻瓜的问题并没有告诉我我想知道什么。我试图在不创建单独列表的情况下搜索所有值。另外,一旦我有了这个值,如何获得相应的密钥?在
编辑 我需要的所有信息都在听写2中。问题是我该怎么做。每个代理程序的标识都与多个用户的标识相关联。我想创建一个如下所示的dict:
{agent_id_1:(user_id_1, user_id_2, user_id_45), agent_id_2:(user_id_987), agent_id_3:(user_id_10, user_id_67)...etc}
基于其中一个答案,我正在研究创建了一个“反向dict”。我还不太明白这一点,因为dict2(agent_id)中的值不是唯一的。这是走这条路吗?在
试试这个。在
如果值是唯一的(即没有重复,我假设是这样,来自'agent_id'),最简单的方法是维护两个字典。第一个,第二个,其中键是第一个的值,它的值是第一个的索引。这样,查找将接近即时(只有创建哈希的时间)。在
在值重复的情况下,只能搜索。同样,如果您使用值维护一个树结构,并指向键,则速度会更快。在
让我们开始给你的口述起一个更具描述性的名字:
现在,您需要来自}中的有效密钥中。在
user_to_agent_id
的所有user_id
,以便agent_id
位于{直接迭代和查找方法
时间复杂度:近似线性的
^{pr2}$user_to_agent_id
。在在}并不重要。如果
len(user_to_agent_id)
中这是时间线性的,因为我们迭代了它的所有项。agent_id in agent_id_to_email
查找应该是近似常量(dict
是哈希表),或者最坏的情况是O(n x ln(n))
。由于两个字典的大小似乎大致相同,因此n
是否超过user_to_agent_id
或{agent_id_to_email
比user_to_agent_id
小,那么反向字典方法会变得更有效,但就目前情况来看,这是最好的方法。在还要注意set intersection似乎有一个
O(N)
computational lower bound。在相关问题 更多 >
编程相关推荐