python中字典的多键值查找

Moh*_*hit 7 python

因此很多时候我使用字典进行键/值查找.但是如果我需要查找多个东西,我通常会有一个for循环.例如:

def check_cond(key):
    return True if key in some_dict else False

some_task = [val for val in vals if check_cond(val)]
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来一次搜索所有的val而不是这个for循环?

喜欢 some_task = fetch_all_conds(vals)

不确定,如果我的问题有意义吗?

Net*_*ave 5

首先,你的功能毫无意义:

def check_cond(key):
    return True if key in some_dict else False
Run Code Online (Sandbox Code Playgroud)

同样简单: key in some_dict

现在:[val for val in vals if check_cond(val)]与dict键和val之间的交集相同,因此您的理解可以修改为:

[val for val in vals if val in some_dict]
Run Code Online (Sandbox Code Playgroud)

如果vals没有重复值,您可以:

 list(set(vals).intersect(some_dict.keys()))
Run Code Online (Sandbox Code Playgroud)

例如:

>>> vals = [1, 2, 3]
>>> d = {1:1, 2:2, 4:4, 5:5}
>>> list(set(vals).intersection(d.keys()))
[1, 2]
Run Code Online (Sandbox Code Playgroud)

你可以使用filter但与理解相同的概念.我们甚至可以将dict键设置为一组以使查找更快:

>>> def check_cond(keys, val):
...     return val in keys
... 
>>> from functools import partial
>>> result = list(filter(partial(check_cond, set(d.keys())), vals))
>>> 
>>> result
[1, 2]
Run Code Online (Sandbox Code Playgroud)