如何按值知道哈希中的键?
Posted
技术标签:
【中文标题】如何按值知道哈希中的键?【英文标题】:How to know key in hash by value? 【发布时间】:2011-07-12 19:04:11 【问题描述】:我有哈希:
test =
'a': ['localhost'],
'b': ['bb','aa'],
'c': ['cc']
例如,我想知道 bb 的密钥? (b)。
【问题讨论】:
这可能会有所帮助:***.com/questions/3282823/… 【参考方案1】:除了遍历键和值之外,没有其他简单的方法可以做到这一点。如果您经常需要这样做,那么将反向映射构建为一次性是值得的,因此您可以查找:
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】:一般你可以像这样构造一个反向字典:
test_reversed = dict((v, k) for k, values in test.iteritems() for v in values)
【讨论】:
不适用于 python v3+... 将是test.items()
而不是 test.iteritems()
【参考方案3】:
假设只有一个键匹配,你可以使用
key = next(k for k in test if "bb" in test[k])
这会遍历所有键,直到分配的列表包含您要查找的内容。此操作的效率远低于按键查找,而这正是字典的用途。
【讨论】:
以上是关于如何按值知道哈希中的键?的主要内容,如果未能解决你的问题,请参考以下文章