Python实现:根据列表元素筛选字典键值对
筛选字典中匹配指定列表元素的键值对
问题描述
给定如下字典和列表:
dict_ = {'one':['a','b','c','d','e','f'], 'two':['g','h','l','m'], 'three':['x','y','z'], 'four':['xx','yy']} ls = ['a','x','c','h','l']
需要遍历字典的所有值列表,筛选出存在于ls中的元素,最终返回一个只包含有匹配元素的键值对的新字典,示例输出如下:
new_dict = {'one':['a','c'],'two':['h','l'], 'three':['x']}
解决方案
使用Python字典推导式结合集合优化查找效率,代码实现如下:
dict_ = {'one':['a','b','c','d','e','f'], 'two':['g','h','l','m'], 'three':['x','y','z'], 'four':['xx','yy']} ls = ['a','x','c','h','l'] # 将列表转为集合,提升元素查找效率 ls_set = set(ls) # 生成目标字典:筛选匹配元素,并过滤无匹配的键 new_dict = { key: [item for item in value if item in ls_set] for key, value in dict_.items() if any(item in ls_set for item in value) } print(new_dict)
代码说明
- 集合优化:将
ls转换为集合ls_set,集合的成员检查操作(in)时间复杂度为O(1),远快于列表的O(n),元素较多时能显著提升性能。 - 字典推导式:遍历原字典的每个键值对,对每个值列表筛选出存在于
ls_set中的元素,生成新的子列表。 - 过滤空值键:通过
any(...)判断当前键的值列表是否有匹配元素,过滤掉没有任何匹配的键(如原字典中的'four')。
内容的提问来源于stack exchange,提问作者serdar_bay
相关产品推荐
相关产品推荐

