python中基于字典值的快速键返回方法

2024-04-20 08:45:34 发布

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

我有两本字典:

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)中的值不是唯一的。这是走这条路吗?在


Tags: 方法id列表字典email密钥情况dict
3条回答

试试这个。在

 for key1, val1 in dict1.iteritems():
        for key2,val2 in dict2.iteritems():
            if key1 == val2:
                print key2

如果值是唯一的(即没有重复,我假设是这样,来自'agent_id'),最简单的方法是维护两个字典。第一个,第二个,其中键是第一个的值,它的值是第一个的索引。这样,查找将接近即时(只有创建哈希的时间)。在

在值重复的情况下,只能搜索。同样,如果您使用值维护一个树结构,并指向键,则速度会更快。在

让我们开始给你的口述起一个更具描述性的名字:

agent_id_to_email = agent_id: agent_email
user_to_agent_id = user_id: agent_id

现在,您需要来自user_to_agent_id的所有user_id,以便agent_id位于{}中的有效密钥中。在

直接迭代和查找方法

时间复杂度:近似线性的user_to_agent_id。在

^{pr2}$

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_emailuser_to_agent_id小,那么反向字典方法会变得更有效,但就目前情况来看,这是最好的方法。在

还要注意set intersection似乎有一个O(N)computational lower bound。在

相关问题 更多 >