如何通过值知道哈希键?

时间:2011-03-10 14:49:55

标签: python

我有哈希:

test = {
    'a': ['localhost'],
    'b': ['bb','aa'],
    'c': ['cc']
}

例如我想知道bb的密钥? (b)中。

3 个答案:

答案 0 :(得分:4)

通常,您可以构建一个反向字典,如下所示:

test_reversed = dict((v, k) for k, values in test.iteritems() for v in values)

答案 1 :(得分:3)

除了迭代键和值之外,没有一种简单的方法可以做到这一点。如果你需要做很多事情,那么将反向映射构建为一次性是值得的,所以你可以查看:

from collections import defaultdict

reversed_test = defaultdict(set)
test = { 'a': ['localhost'], 'b': ['bb','aa'], 'c': ['cc'] }

for k, v in test.items():
    for i in v:
        reversed_test[i].add(k)

print reversed_test['bb']

reversed_test字典将诸如'bb'之类的密钥映射到最初映射到包含'bb'的列表的字符串集。这比Space_C0wb0y's neat solution简洁得多,因为我假设test可能看起来像这样:

{'a': ['foo','bar','foo'], 'b': ['foo','quux'] }

换句话说:

  • 多个键可能会映射到包含'foo'
  • 的列表
  • 'foo'可能会在列表中多次出现。

答案 2 :(得分:2)

假设只有一个密钥匹配,您可以使用

key = next(k for k in test if "bb" in test[k])

这将迭代所有键,直到分配的列表包含您要查找的内容。此操作的效率远低于按键查找,这就是字典的用法。