python - 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)]
有没有更好的方法来一次搜索所有 val 而不是这个 for 循环?
喜欢some_task = fetch_all_conds(vals)
不确定,我的问题是否有意义?
解决方案
首先,您的功能没有意义:
def check_cond(key):
return True if key in some_dict else False
同样简单:key in some_dict
Now:[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]
推荐阅读
- javascript - 如何从特定日期制作倒数计时器
- angular - 我们如何在 Angular 的延迟加载模块中获取路由参数
- database - 修复 Cassandra 数据库
- arrays - VBA 比较 2 个数组并返回缺失的行,包括重复项
- sql-server - SQL Server 2019 :: 功能是否适用于以前的兼容性级别?
- php - json rpc 2.0 在 laravel api 中的添加请求错误
- sql - 如何使用外键对模型进行单元测试?
- php - 注册用户时检查记录是否存在
- azure - 从应用服务计划创建托管时,Azure 函数应用不显示密钥
- nlp - 手套导入错误 - 语料库 - 无法导入