如何按值知道哈希中的键?

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])

这会遍历所有键,直到分配的列表包含您要查找的内容。此操作的效率远低于按键查找,而这正是字典的用途。

【讨论】:

以上是关于如何按值知道哈希中的键?的主要内容,如果未能解决你的问题,请参考以下文章

哈希表中的条目是否可以使用相同的键和相同的值?

如果存在,如何重命名哈希中的键

C ++:指针作为哈希表中的键

如何在 Perl 中找到哈希中的键数?

如何在 Lua 中获取哈希表中的键数?

php [php:array_search()]按值搜索数组中的键。 #PHP