如何通过列表中的值获取字典中对应值的列表?

3

I have the following dictionary :

d = {'1' : [1, 2, 3, 4], '2' : [10, 20, 30, 40]}

如何根据列表中的值查找对应的键? 比如说,如果我要查找值为3,我需要获取键'1',如果我要查找值为10,我需要获取键'2'。


1
如果有多个键匹配怎么办? - thefourtheye
不是这样的。每个键代表一个在字典中唯一的<activity_id>。 - Binary
@Binary:在字典中,键始终是唯一的。重要的是列表中的值是否唯一。 - Martijn Pieters
对于您接下来的问题,建议阅读[提问]和[最小化完备可复现示例]。 - boardrider
3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
5
您可以将字典反转为以下结构以进行此类查找:
reverse_d = {
    1: '1',
    2: '1',
    3: '1',
    4: '1',
    10: '2',
    …
}
可以通过循环遍历每个键的每个值来构建它:
reverse_d = {}

for key, values in d.items():
    for value in values:
        reverse_d[value] = key
更简洁的写法是使用字典推导式:
reverse_d = {value: key for key, values in d.items() for value in values}

现在查找非常简单!

k = reverse_d[30]
# k = '2'
这仅在进行多次查找时比搜索整个原始词典提供更好的性能。

4
您可以使用带有过滤条件的生成器表达式,就像这样:
>>> def get_key(d, search_value):
...     return next(key for key, values in d.items() if search_value in values)
...
>>> get_key(d, 10)
'2'
>>> get_key(d, 2)
'1'
如果没有任何键包含正在搜索的值,将返回None
>>> get_key(d, 22)
None

1

这是我第一次回答问题。这个方法怎么样?

def get_key(d,search_value):
        res = []
        for v in d.items():
                if search_value in v[1]:
                        res.append(v[0])
        return res

>>> D = {'a':[2,2,3,4,5],'b':[5,6,7,8,9]}
>>> getkey.get_key(D,2)
['a']
>>> getkey.get_key(D,9)
['b']
>>> getkey.get_key(D,5)
['a', 'b']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,