1

首先,这个问题不是最有效的方法来获取字典中值的键的最有效方法的副本,因为询问者询问了 python 并且还因为我想讨论下面给出的解决方案是否有意义以及是否可以这样做一个问题。

所以,让我们假设,我有以下数据结构:

{ 
   "one" : "1",
   "two" : "2",
   .
   .
   "hundred thousand" : "100000"
}

现在,我希望能够获得针对特定值的键(假设我不会对不同的键具有相同的值)。一种解决方案是通过迭代数据来获取密钥,但是如果我们将数据结构化为:

 data = [
    { 
       "one" : "1",
       "two" : "2",
       .
       .
       "hundred thousand" : "100000"
    },
    { 
       "1" : "one",
       "2" : "two",
       .
       .
       "100000" : "hundred thousand"
    }
   ]

所以,现在data[0]."two"可以用来获取两个值。但是,假设有一种情况,我知道值是 999,我想知道它的密钥,所以我会得到它的密钥,data[1]."999"即我将使用数据 [1] 中的反转数据。

此解决方案可能比遍历数据以找到正确的键更快。你怎么看?

4

2 回答 2

2

你是正确的,遍历所有键是低效的,你提出的保持反向查找散列的方法是我见过的用于解决这个问题的最常见的方法。当然,最好的解决方案是设计一个不需要执行反向查找的设计。

如果您存储少量键,并且不经常执行此查找,那么您可能对 O(n) 成本没问题(当然,在这种情况下,维护反向查找哈希也不会造成太大伤害) . 在另一个极端,如果您有数百万个键并且无法承受反向查找哈希的内存冲击,您可以使用诸如 Bloom Filters 之类的东西来帮助降低查找成本。

于 2012-07-09T12:45:38.097 回答
0

您的问题没有通用解决方案,因为多个键可以具有相同的值。对于您的具体示例,如果您在谈论速度方面的效率,那么是的,您当前的反向映射解决方案是最快的方法(以存储反向映射的额外空间为代价)。

于 2012-07-09T12:44:16.253 回答