我有哈希:
test = {
'a': ['localhost'],
'b': ['bb','aa'],
'c': ['cc']
}
例如我想知道bb的密钥? (b)中。
答案 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])
这将迭代所有键,直到分配的列表包含您要查找的内容。此操作的效率远低于按键查找,这就是字典的用法。