为了账号安全,请及时绑定邮箱和手机立即绑定

python中字典的多键值查找

python中字典的多键值查找

青春有我 2021-09-01 12:50:42
所以很多时候我使用字典进行键/值查找。但是如果我需要查找多个东西,我通常有一个 for 循环。例如:def check_cond(key):    return True if key in some_dict else Falsesome_task = [val for val in vals if check_cond(val)]有没有更好的方法来一次搜索所有 vals 而不是这个 for 循环?喜欢 some_task = fetch_all_conds(vals)不确定,我的问题是否有意义?
查看完整描述

1 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

首先,你的函数没有意义:


def check_cond(key):

    return True if key in some_dict else False

同样简单: 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]

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


 list(set(vals).intersect(some_dict.keys()))

例如:


>>> vals = [1, 2, 3]

>>> d = {1:1, 2:2, 4:4, 5:5}

>>> list(set(vals).intersection(d.keys()))

[1, 2]

您可以使用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]


查看完整回答
反对 回复 2021-09-01
  • 1 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信